Cam*_*ues 111 bash shell autocomplete
我最近花了很多时间在shell中,我想知道选项卡自动完成是如何工作的.它背后的机制是什么?bash如何知道每个目录的内容?
Paŭ*_*ann 98
自动完成有两个部分:
正如fixje已经提到的那样,readline库管理命令行编辑,并在按下tab时回调bash,以启用完成.Bash然后给出(参见下一点)可能的完成列表,readline插入尽可能多的字符,这些字符由已经输入的字符明确标识.(您可以配置readline库,请参阅Bash的命令行编辑部分)手册了解详情.)
Bash本身具有内置功能,complete
可以为各个命令定义完成机制.如果对于当前命令没有定义任何内容,它使用文件名完成(使用opendir/readdir,如Ignacio所说).
定义您自己的完成的部分在可编程完成部分中描述.简而言之,
complete «options» «command»
您可以定义某些命令的完成情况.例如complete -u su
,
在完成su
命令的参数时,请搜索当前系统的用户.
如果这比普通选项可以覆盖的更复杂(例如,取决于参数索引的不同完成,或取决于先前的参数),您可以使用-F function
,然后将调用shell函数来生成可能的完成列表.(例如,这用于git完成,这非常复杂,取决于子命令,有时取决于给定的选项,并且有时使用分支的名称(这不是bash所知道的).
您可以简单地列出当前bash环境中定义的现有完成项complete
,以便对可能的内容有所了解.如果您安装了bash-completion软件包(或者它在系统上命名),则会安装许多命令的完成,并且正如Wrikken所说,它/etc/bash_completion
包含一个bash脚本,然后经常在shell启动时执行以配置它.可以放置其他自定义完成脚本/etc/bash_completion.d
; 这些都来自/etc/bash_completion
.