bash如何进行`ssh`自动完成?

问题描述 投票:0回答:1

我安装了 "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 选项?

bash autocomplete tab-completion compgen
1个回答
0
投票

如果没有为一个命令(或一个函数或其他什么)定义完成器,那么 "默认 "完成器就会启动。

这个默认的完成器可以在这里看到。

$ 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 sshcomplete -p ssh. 只有在你按TAB-TAB键的那一刻,你才会发现。第一次 的完成人 ssh 得到加载。

© www.soinside.com 2019 - 2024. All rights reserved.