Nic*_*ole 6 bash autocomplete shell-script
我找到了以下脚本(用于 bash),它使我能够为我连接到的任何主机名(来自~/.ssh/known_hosts
)获取制表符补全:
complete -W "$(echo `cat ~/.ssh/known_hosts | cut -f 1 -d ' ' | sed -e s/,.*//g | uniq | grep -v "\["`;)" ssh
Run Code Online (Sandbox Code Playgroud)
但是,问题是在我输入用户名后选项卡完成不起作用。
我该如何改进,所以如果我输入...
ssh myusername@my
Run Code Online (Sandbox Code Playgroud)
并期望它完成“myhostname.com”它就能做到吗?
如果它也可以选择整个字符串(user@hostname)会更好,但我可以接受任何一个选项。没有第一个,除非我的主机用户名与本地用户名匹配,否则这没什么用。
如果$COMP_WORDBREAKS
包含“@”(这是我系统上的默认设置),则会出现我无法解决的严重问题(按后Tab,Enter一个“@”被删除)。
但是,如果您从该环境变量中删除它,那么这是有效的:
_foo () {
if [[ "$COMP_WORDBREAKS" =~ "@" ]]; then
echo ""
echo '$COMP_WORDBREAKS contains "@"; aborting'
COMPREPLY=()
else
at_in=no
if [[ ${COMP_WORDS[COMP_CWORD]} =~ "@" ]]; then
var="${COMP_WORDS[COMP_CWORD]}"
tail="${var#*@}"
prefix="${var%"$tail"}"
else
prefix=""
fi
COMPREPLY=($(cut -f 1 -d ' ' <~/.ssh/known_hosts |
sed -e 's/,/\n/g' | uniq |
awk -v prefix="${prefix}" '/\[/ {next}; {print prefix $0;}'))
COMPREPLY=($(compgen -W "${COMPREPLY[*]}" "${COMP_WORDS[COMP_CWORD]}"))
fi
}
complete -F _foo ssh
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3232 次 |
最近记录: |