我正在处理一个包含许多构建目标的大型软件项目。输入make <tab> <tab>
时,它会显示超过1000个可能的制作目标。
我想要的是一个bash脚本,它按照某些规则过滤这些目标。因此,我想在bash变量中列出make目标列表。
make_targets=$(???)
[do something with make_targets]
make $make_targets
如果我不想用我的项目改变任何东西,那将是最好的。
我如何获得这样的清单?
答案 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
的一个。