目标
没有 Tab 补全导致用户经常拼错子命令,拖慢日常使用。本配方编写 bash 补全函数,在第一位置提示子命令列表、后续位置回退到文件补全,并说明需在交互式 shell 的 rc 文件里 source;提醒 bash 补全与 zsh、fish 不同,手工维护易出错。
步骤要点
- 编写补全函数提示子命令列表。
- 后续位置回退到文件补全。
- 在交互式 shell 的 rc 文件里 source 脚本。
- 新增子命令时同步更新补全列表。
_tool_completions() {
local cur="${COMP_WORDS[COMP_CWORD]}"
if [ "$COMP_CWORD" -eq 1 ]; then
COMPREPLY=( $(compgen -W "sync list config" -- "$cur") )
return
fi
COMPREPLY=( $(compgen -f -- "$cur") )
}
complete -F _tool_completions tool
排错提示
- 脚本未 source 会导致补全不生效。
- 带路径的参数补全需按位置分支。
- 手工维护补全易出错。
适用边界
- 不同 shell 的补全是分离的。
- 不校验参数取值。