我正在尝试为自己的一组命令开发自动完成功能或制表符功能。
例如,假设foo是我的二进制文件:
CLI>> foo [TAB] [TAB]
它应显示主要命令configure
和show
。
然后,如果我选择configure
,则应显示子命令CM
,DSP
和NPU
:
CLI>> foo configure [TAB] [TAB]
DSP NPU CM`
我只知道如何完成并显示第一级 - 如何获得第二级?
我会将其放在/etc/completion.d
。
我的代码:
_foo()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
words=("${COMP_WORDS[@]}")
cword=$COMP_CWORD
opts="configure show"
}
我不知道如何在CM
下添加子命令DSP
NPU
configure
。
答案 0 :(得分:18)
以下是两级案例的示例脚本(包含show
子命令的部分以显示它是如何完成的 - 如果它们与您的案例无关,则可以删除这三行:)< / p>
_foo()
{
local cur prev
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
case ${COMP_CWORD} in
1)
COMPREPLY=($(compgen -W "configure show" -- ${cur}))
;;
2)
case ${prev} in
configure)
COMPREPLY=($(compgen -W "CM DSP NPU" -- ${cur}))
;;
show)
COMPREPLY=($(compgen -W "some other args" -- ${cur}))
;;
esac
;;
*)
COMPREPLY=()
;;
esac
}
complete -F _foo foo
希望从这个例子中可以很明显地将它扩展到三级命令等。