我希望能够掌握给定部分命令的一系列可能的补全。例如,partial 命令service um
有以下可能的补全:
$ service um<TAB><TAB>
umountfs umountnfs.sh umountroot
Run Code Online (Sandbox Code Playgroud)
我想要一个completions
具有以下行为的函数:
$ for x in $(completions 'service um'); do
> echo $x
> done
umountfs
umountnfs.sh
umountroot
Run Code Online (Sandbox Code Playgroud)
这是我认为可以成为完整答案的方法。我绝对希望看到完整的答案,但鉴于相对简单<TAB><TAB>
以非编程方式提供相同的功能,感觉也可能有更灵活的解决方案。
我可以发现service
命令的完成机制是_service
函数:
$ complete -p service
complete -F _service service
Run Code Online (Sandbox Code Playgroud)
当这个完成函数_service
被调用时,一堆环境变量被设置(即COMP_{LINE,POINT,KEY,TYPE,WORDS,CWORD}
;参见bash 手册页),该函数作为参数给出正在完成的命令、正在完成的单词和前一个单词,并填充COMPREPLY
可能的完成. 所以我想要的completions
函数可以这样定义:
function completions() {
# Produce an array of tokens in the input.
read -a words <<< $1
# Use "complete …
Run Code Online (Sandbox Code Playgroud)