我安装了 "bash-completion "包。
ssh
在命令行中完成(在 bash
)正在工作。ssh TAB-TAB
将完成过去使用的主机和 ssh -TAB-TAB
将完成现有 ssh
选项。
然而,当我搜索当前定义的完成时。
$ complete | grep ssh
complete -F _known_hosts ssh-installkeys
complete -F _service /etc/init.d/ssh
... 我发现没有注册的完成项是 ssh
?!
complete -p ssh
bash: complete: ssh: no completion specification
当我检查 ssh
补遗书 /usr/share/bash-completion/completions/ssh
果然 是否 登记 ssh
完成。
$ grep complete /usr/share/bash-completion/completions/ssh | grep ssh | grep -v '^#'
shopt -u hostcomplete && complete -F _ssh ssh slogin autossh sidedoor
那为什么ssh完成没有显示在... ... complete | grep ssh
? 怎么会呢?是否 破折号 ssh
选项?
如果没有为一个命令(或一个函数或其他什么)定义完成器,那么 "默认 "完成器就会启动。
这个默认的完成器可以在这里看到。
$ complete -p -D
complete -F _completion_loader -D
当 bash-completion
软件包安装好后,将源 /usr/share/bash-completion/bash_completion
通过 /etc/bash.bashrc
而这将分配给 _completion_loader
功能。
_completion_loader
将 动态 在完成请求时加载特定的补全器,以满足shell的补全器还不知道的命令(见 此处).
在 ssh
我在那里做的终端还没有装上。ssh
完成者,所以我没有看到它与 complete | grep ssh
或 complete -p ssh
. 只有在你按TAB-TAB键的那一刻,你才会发现。第一次 的完成人 ssh
得到加载。