我定义了基本的完成脚本。对于程序d,可以使用子命令exempt、limit、show、update。
complete -W "exempt limit show update" d
但是,当我在 后按 Tab 时d exempt
,bash 再次显示完成菜单。
$ d <tab>
exempt limit show update
$ d exempt <tab>
exempt limit show update
$ d exempt exempt <tab>
exempt limit show update
如何防止 Bash 一次又一次插入相同的单词?
答案1
当您使用基本完成机制时,您所看到的是预期的行为complete -W
。
如果你想要更智能的补全,你需要编写补全函数(参见《可编程补全》部分)bash手册)并使用complete -F
.
以下是如何调整您的示例:
$ comp_d() {
COMPREPLY=( $(
if [ "$COMP_CWORD" -eq 1 ]; then
compgen -W "exempt limit show update" "$2"
fi
) )
}
$ complete -F comp_d d
此类函数必须以数组形式返回完成候选COMPREPLY
。我仅在用户完成第一个参数(COMP_CWORD
为 1)时使用您的单词列表,否则数组为空。