自动完成有两个部分:
>如已经由fixje所提到的,readline库管理命令行编辑,并在按下tab时调用bash以启用完成。 Bash然后给出(见下一点)一个可能的完成列表,并且readline插入与已经输入的字符明确识别的字符一样多(你可以非常多地配置readline库,参见Bash手册的第Command line editing节细节。)
> Bash本身具有完整的buildin来定义单个命令的完成机制。如果对当前命令没有定义,它使用完成文件名(使用opendir / readdir,如Ignacio所说)。
定义您自己的完成的部分在Programmable Completion部分中描述
完成«选项»«命令»您定义一些命令的完成。例如完整的su说
当完成su命令的参数时,搜索当前系统的用户。
如果这比较复杂
正常选项可以覆盖(例如,取决于参数索引或取决于先前的参数的不同完成)
你可以使用-F函数,然后它将调用一个shell函数来生成可能的完成列表。
(这用于例如git完成,这是非常复杂,取决于子命令和有时
给出的选项,并且有时使用分支的名称(这些都不是什么bash知道的)。
您可以使用简单的完整列出在当前bash环境中定义的现有完成,以获得可能的结果。如果你安装了bash-completion软件包(或者在你的系统上命名了),那么会安装很多命令的完成,正如Wrikken所说,/ etc / bash_completion包含一个bash脚本,然后经常在shell启动时执行配置此。其他自定义完成脚本可以放在/etc/bash_completion.d中;这些都源自/ etc / bash_completion。