获取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