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

获取bash变量中的自动完成列表,bash,autocomplete,makefile,Bash,Autocomplete,Makefile,我正在处理一个有很多构建目标的大型软件项目。键入make时,会显示1000多个可能的make目标。 我想要的是一个bash脚本,它根据某些规则过滤这些目标。因此,我希望在bash变量中有这个make目标列表 make_targets=$(???) [do something with make_targets] make $make_targets 如果我不需要改变我的项目,那将是最好的 如何获得这样的列表?您需要覆盖/修改make的完成函数。在Ubuntu上,它位于: /usr/share/

我正在处理一个有很多构建目标的大型软件项目。键入
make
时,会显示1000多个可能的make目标。 我想要的是一个bash脚本,它根据某些规则过滤这些目标。因此,我希望在bash变量中有这个make目标列表

make_targets=$(???)
[do something with make_targets]
make $make_targets
如果我不需要改变我的项目,那将是最好的


如何获得这样的列表?

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

/usr/share/bash-completion/completions/make
(其他发行版可能将文件存储在
/etc/bash\u completion.d/make

如果不想更改整个系统的完成行为,可以编写一个小型包装器脚本,如
buildproject
,它调用
make
。然后为该映射器编写一个完成函数,该函数是从
make
的映射器中派生出来的。

@yuyichao创建了一个:

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 ''
test foo clean