我想知道是否可以使自动完成跨越一个=符号。因此,例如,我想输入foo BAR=[TAB][TAB]
,并填写BAR
的可能值。我尝试了以下内容:我有一个名为'bar'的文件,如下所示:
#!/bin/bash
echo -e "BAR=100\nBAR=110\nBAR=200" | grep "^$2"
然后我这样做:
~> complete -C bar foo
如果我输入foo [TAB][TAB]
,它会为我提供BAR的一些可能值。如果,我键入foo BAR=[TAB][TAB]
,它会失败(它会将BAR=BAR=
附加到命令的末尾)。 (注意,如果我输入bar 1 BAR=
,它会给我一个正确的完成列表,所以这不是条形码的问题。)
这对我的一些脚本非常有用。
答案 0 :(得分:1)
创建一个函数(在你的.bashrc中):
bar()
{
local POS=${COMP_WORDS[COMP_CWORD]}
if [ "${COMP_WORDS[1]}" = "BAR" ] && [ $COMP_CWORD -eq 3 ]; then
COMPREPLY=($(echo -e "100\n110\n200" | grep ^$POS ))
fi
}
并将函数链接到命令foo:
complete -F bar foo