Pun*_*eth 13 bash autocomplete tab-completion compgen
我正在尝试为我自己的命令集开发自动完成或制表符完整功能.
例如,假设foo是我的二进制文件:
CLI>> foo [TAB] [TAB]
Run Code Online (Sandbox Code Playgroud)
它应该显示主要命令configure和show.
然后如果我选择configure,它应该显示子命令CM,DSP并且NPU:
CLI>> foo configure [TAB] [TAB]
DSP NPU CM`
Run Code Online (Sandbox Code Playgroud)
我只知道如何完成并显示第一级 - 如何获得第二级?
我会把它放进去/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"
}
Run Code Online (Sandbox Code Playgroud)
我很卡如何添加子命令CM DSP NPU下configure.
Zer*_*eus 20
这是一个两级案例的示例脚本(有一个子命令部分,show用于显示它是如何完成的 - 如果它们与你的案例无关,你可以删除这三行):
_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
Run Code Online (Sandbox Code Playgroud)
希望从这个例子中可以很明显地将它扩展到三级命令等.