我compgen -c make
在 mac 上的 BASH 中运行并得到以下返回值:
makepqg
makepqg
makepqg
make
makeinfo
makepqg
makepqg
但我想要什么和应该做什么?得到(并且在完成时得到)是:
foo
bar
biz
baz
这代表了我的各种 PHONY 制定规则来做自动的事情。
通常,如何使用可执行工具从 SHELL 生成此列表compgen
?
(这是一个理想的问题,因为从 python3 开始,subprocess
无法模拟交互,我将不得不做更多的事情)
这与重复的候选者“我如何在 make 中获取目标(释义)”不同,因为我认为(非工作)命令不是一个好的答案,这个问题是关于compgen
andmake
而不是make
and the的内部运作make
:
make -p no_targets__
| awk -F':' '/^[a-zA-Z0-9][^\$$#\/\\t=]*:([^=]|$$)/ {split(\$$1,A,/ /);for(i in A)print A[i]}' "
| grep -v '__\$$' "
| sort
但是我可以使用正则表达式为我的高级目的找到某种解决方案吗?
在我看来,不,因为 compgen 很容易且令人难忘,而这个 kludge 很难,并且会在我堆在上面的任何代码上引入拖累。
此外,该副本允许对 makefile 进行更改。
在我的情况下,make 文件必须被认为是给定的,否则我所做的将不太有用。
因此,更具体地说,给定任何makefile,是否存在涉及 make 之外的工具的解决方案,可以查看 make 并让 make 输出其配方列表,就像 bash 完成一样。
换句话说:可以为任何makefile(不失一般性)做到这一点,而不需要对makefile的写权限,也不需要使用tty模拟器模拟tab-tab?