我正在尝试编写一个bash自动完成脚本来完成已知的ssh主机名。
这适用于裸体主机名(例如$ ssh someh<TAB>
完成到$ssh somehost.example.com
)但在使用user@host
模式时失败。
在这种情况下,第一次完成工作,但吞下'@'字符:
$ ssh user@someho<TAB>
产量
$ ssh usersomehost.example.com
然后进一步完成失败,因为usersomehost.example.com现在被视为$COMP_CWORDS
中的一个单词。
这是完成工作的功能:
_complete_ssh_hosts ()
{
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
comp_ssh_hosts=$(awk 'BEGIN{FS=",| "} !/^[[#]|^$/ { print $1 }' ~/.ssh/known_hosts;
awk '/^Host.*/ { if ($2 ~ !/^\*.*/) print $2}' ~/.ssh/config)
COMPREPLY=( $(compgen -W "${comp_ssh_hosts}" -- "$cur"))
return 0
}
任何人都可以给我一个关于我做错的指针吗?