我有一个简单的 bash 完成脚本,它本质上调用我的(非 bash)程序并将其输出设置为COMREPLY
,即
COMPREPLY=( $(my-program -- "${COMP_WORDS[@]}") )
某些选项接受逗号分隔值,有没有办法只处理最后一项的建议?假设用户输入-v opt1,opt2,o<TAB><TAB>
,假设我的程序发现此时的有效选项是opt3
或opt4
。如果我只返回这 2 并按 TAB 键,输出将更改为o
(整个前缀消失)。如果我返回opt1,opt2,opt3
和opt1,opt2,opt4
,它会起作用,但这看起来不太好。
可能的解决方案是做类似的事情Bash 完成逗号分隔值,即调用my-program
生成[opt3, opt4]
,并将其作为单词列表传递给compgen
withopt1,opt2,
作为前缀。但这需要在 bash 脚本中复制一些逻辑,如my-program
.有没有更好的办法?