我编写了一个函数来从 ssh 配置获取主机,而无需获取通配符主机:
sshConfAutoComplete() {
cat ~/.ssh/config | \
grep 'host ' | \
sed '
s#.*\*##g;
s#host ##g
'
}
输出:
pi
lynx
iridium
batchelorantor
rasp
输出是正确的,所以我将这个函数添加到:
/usr/local/etc/bash_completion.d/ssh
像这样:
sshConfAutoComplete() {
cat ~/.ssh/config | \
grep 'host ' | \
sed '
s#.*\*##g;
s#host ##g
'
}
complete -F sshConfAutoComplete ssh
然后我添加了这个来源. /usr/local/etc/bash_completion.d/ssh
:~/.bash_profile
Sourced ~/bash_profile
,然后当我输入ssh <tab>
以下内容时会出现:
pi
lynx
iridium
batchelorantor
rasp
如果我输入ssh ly <tab>
它不会自动完成 to lynx
,它只会输出上面的内容。
我该如何解决?
在标题为“可编程完成”的
man bash
部分中,解释了被调用的函数如何需要在数组变量中提供匹配结果。通常,命令提供的完整列表 会传递给命令,以便它尝试将单词与目标单词(即函数的 arg 2 ( ))进行匹配。稍微简化一下我们得到:-F
COMPREPLY
sed
compgen -W
$2
我做到了这一点并将其添加到我的
~/bash_profile
:我之前的 sed 命令在删除时留下了一个空行
host *