我的.ssh/config
别名开始增多,记住它们也变得越来越困难。
您有什么建议可以更好地管理这个不断增长的收藏吗?
例如,当我输入ssh
某种类型时自动完成?
答案1
Bash 的一个相当糟糕的1补全:
function _ssh_complete () {
local match=${COMP_WORDS[${COMP_CWORD}]}
local hosts=
local default=
local _ssh_complete_hostlist=$( \
grep "^\s*Host\s*=" ~/.ssh/config 2>/dev/null \
| sed -r "s/^[^=]+= *//;s/ /\n/g" \
| sort )
for h in $_ssh_complete_hostlist; do
if [[ $h =~ ^$match ]]; then
hosts="$hosts $h"
fi
done
if ! (( ${COMP_CWORD} == ${#COMP_WORDS[@]}-1 )); then
default=$( compgen -f ${COMP_WORDS[${COMP_CWORD}]} )
fi
COMPREPLY=($hosts $default)
}
complete -F _ssh_complete ssh
您可能希望$_ssh_complete_hostlist
在完成函数之外进行初始化(例如,在 shell 初始化期间),否则每次完成试验都会生成三个程序。配置文件不会经常更改,因此您可以在需要时手动调用初始化函数。
1)例如,它仅在行尾完成,因此您必须先声明任何选项,然后才开始输入并完成远程主机名。