是否可以使 bash 自动完成功能看起来像 Cisco IOS shell 中一样?
我的意思是为每个完成添加简短的描述,如下所示:
telnet 10.10.10. (TAB Pressed)
10.10.10.10 - routerA
10.10.10.11 - routerB
其中 10.10.10.10 和 10.10.10.11 是可能的补全
routerA & routerB 只是描述(不被执行)。
我知道 bash 可以使用“complete -W”完成命令,但是它能够打印它们的描述吗?
我有一个解决方案,不需要按 TAB 两次以上或回显任何额外信息。关键是检查是否只有一个补全,然后将该补全剥离到有效部分,通常是通过删除“注释”分隔符之后的最大匹配后缀。要完成OP的示例:
_telnet() {
COMPREPLY=()
local cur
cur=$(_get_cword)
local completions="10.10.10.10 - routerA
10.10.10.11 - routerB
10.20.1.3 - routerC"
local OLDIFS="$IFS"
local IFS=$'\n'
COMPREPLY=( $( compgen -W "$completions" -- "$cur" ) )
IFS="$OLDIFS"
if [[ ${#COMPREPLY[*]} -eq 1 ]]; then #Only one completion
COMPREPLY=( ${COMPREPLY[0]%% - *} ) #Remove ' - ' and everything after
fi
return 0
}
complete -F _telnet -A hostnames telnet
这给出了您正在寻找的确切输出,并且当只有一种可能的完成时,注释会在完成之前被删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)