bash选项卡完成是如何工作的?
我最近花了很多时间在shell中,我想知道tab autocomplete是如何工作的。背后的机制是什么?bash如何知道每个目录的内容?如果您对基础知识感兴趣: Bash使用的是历史记录和基本完成。如果您想获得详细的了解,可以检查源代码。bash选项卡完成是如何工作的?,bash,shell,autocomplete,Bash,Shell,Autocomplete,我最近花了很多时间在shell中,我想知道tab autocomplete是如何工作的。背后的机制是什么?bash如何知道每个目录的内容?如果您对基础知识感兴趣: Bash使用的是历史记录和基本完成。如果您想获得详细的了解,可以检查源代码。 此外,您还可以使用readline构建自己的CLI界面,以完成自动完成功能有两个部分: 正如fixje已经提到的那样,readline库管理命令行编辑,并在按下tab键时回调bash以启用完成。Bash然后给出(参见下一点)一个可能的补全的列表,并且rea
此外,您还可以使用readline构建自己的CLI界面,以完成自动完成功能有两个部分:
- 正如fixje已经提到的那样,readline库管理命令行编辑,并在按下tab键时回调bash以启用完成。Bash然后给出(参见下一点)一个可能的补全的列表,并且readline插入尽可能多的由已经键入的字符明确标识的字符。(您可以非常多地配置readline库,有关详细信息,请参阅Bash手册的一节。)
- Bash本身具有内置的
来定义单个命令的完成机制。如果当前命令未定义任何内容,则使用文件名完成(使用opendir/readdir,如Ignacio所述) 本节介绍了定义您自己的完井作业的部分。简言之,与complete
定义某些命令的完成。例如complete«options»«command»
说 完成complete-u su
命令的参数时,搜索当前系统的用户 如果这比 正常选项可以包括(例如,根据参数索引或之前的参数,不同的补全), 您可以使用su
,该函数随后将调用一个shell函数来生成可能完成的列表。 (例如,这用于git完成,这非常复杂,取决于子命令,有时也取决于 在给定的选项上,有时使用分支名称(bash不知道这些名称)-F function
您可以简单地使用
complete
,列出当前bash环境中定义的现有完成项,以了解可能的情况。如果您安装了bash完成包(或以系统上的名称命名),安装了许多命令的完成,正如Wrikken所说,/etc/bash_completion
包含一个bash脚本,该脚本通常在shell启动时执行以配置此脚本。其他自定义完成脚本可以放在/etc/bash_completion.d
中;这些脚本都来自/etc/bash_completion
>您可能需要检查/etc/bash_completion
(至少,这是Debian中有很多魔力的地方)@Wrikken:这就是bash_完成,它依赖于制表符完成,但并不完全取决于它是如何完成的。在*nix stackexchange上还有几个问题,包括:SU:Man页面上至少有一个问题只针对独立命令,不针对shell内置。但它是我链接的bash手册的一部分。