如何为含嵌套子命令的CLI程序实现简易Bash自动补全?
嵌套子命令的Bash自动补全实现(无需定义函数)
要实现你需要的嵌套补全,不用单独定义shell函数,直接利用Bash补全的内置变量和条件判断,在complete命令里动态生成补全词表即可。
针对你的CLI程序,执行以下命令:
complete -W "$([[ $COMP_CWORD -eq 1 ]] && echo 'task config' || [[ ${COMP_WORDS[1]} = 'task' ]] && echo 'start stop' || [[ ${COMP_WORDS[1]} = 'config' ]] && echo 'set unset')" program
工作机制
$COMP_CWORD:当前补全的单词在命令行中的位置(从0开始,program是位置0)$COMP_WORDS:存储当前命令行所有单词的数组- 条件分支逻辑:
- 当补全第1个参数(位置1)时,返回顶层子命令列表
task config - 若第1个参数是
task,补全后续参数时返回start stop - 若第1个参数是
config,补全后续参数时返回set unset
- 当补全第1个参数(位置1)时,返回顶层子命令列表
使用方法
将上述命令添加到~/.bashrc(永久生效)或当前Shell会话中,之后测试:
- 输入
program按Tab,会弹出task/config选项 - 输入
program task按Tab,会弹出start/stop选项 - 输入
program config按Tab,会弹出set/unset选项
内容的提问来源于stack exchange,提问作者Nils Werner
相关产品推荐
相关产品推荐

