Bash 补全自己的 compgen 前缀

Bash 补全自己的 compgen 前缀

我有一个简单的 bash 完成脚本,它本质上调用我的(非 bash)程序并将其输出设置为COMREPLY,即

COMPREPLY=( $(my-program -- "${COMP_WORDS[@]}") )

某些选项接受逗号分隔值,有没有办法只处理最后一项的建议?假设用户输入-v opt1,opt2,o<TAB><TAB>,假设我的程序发现此时的有效选项是opt3opt4。如果我只返回这 2 并按 TAB 键,输出将更改为o(整个前缀消失)。如果我返回opt1,opt2,opt3opt1,opt2,opt4,它会起作用,但这看起来不太好。

可能的解决方案是做类似的事情Bash 完成逗号分隔值,即调用my-program生成[opt3, opt4],并将其作为单词列表传递给compgenwithopt1,opt2,作为前缀。但这需要在 bash 脚本中复制一些逻辑,如my-program.有没有更好的办法?

相关内容