bash自动完成可以跨越一个等号

时间:2014-09-16 19:10:26

标签: bash bash-completion

我想知道是否可以使自动完成跨越一个=符号。因此,例如,我想输入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=,它会给我一个正确的完成列表,所以这不是条形码的问题。)

这对我的一些脚本非常有用。

1 个答案:

答案 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