在bash变量中获取自动完成列表

时间:2014-08-18 07:46:45

标签: bash autocomplete makefile

我正在处理一个包含许多构建目标的大型软件项目。输入make <tab> <tab>时,它会显示超过1000个可能的制作目标。 我想要的是一个bash脚本,它按照某些规则过滤这些目标。因此,我想在bash变量中列出make目标列表。

make_targets=$(???)
[do something with make_targets]
make $make_targets

如果我不想用我的项目改变任何东西,那将是最好的。

我如何获得这样的清单?

2 个答案:

答案 0 :(得分:1)

@yuyichao创建了一个function to get autocomplete output

comp() {
    COMP_LINE="$*"
    COMP_WORDS=("$@")
    COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    COMP_POINT=${#COMP_LINE}
    COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    COMP_TYPE=9
    COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}

只需运行comp make ''即可获得结果,您可以操纵它。例如:

$ comp make ''
test foo clean

答案 1 :(得分:0)

您需要覆盖/修改make的完成功能。在Ubuntu上,它位于:

/usr/share/bash-completion/completions/make

(其他发行版可能会将文件存储在/etc/bash_completion.d/make

如果您不想更改整个系统的完成行为,可以编写一个小的包装脚本,如build-project,调用make。然后为该映射器编写一个完成函数,该函数派生自make的一个。