我正在尝试创建使用管道的make命令。但是命令没有按预期执行。
示例
SHELL:=/bin/bash
all:
$(shell ps aux | grep -i someProcName)
输出:
bash: kls602: command not found
grep: kls602: No such file or directory
grep: 46905: No such file or directory
grep: 0.0: No such file or directory
grep: 0.0: No such file or directory
grep: 4306668: No such file or directory
grep: 6480: No such file or directory
grep: s008: No such file or directory
grep: S: No such file or directory
grep: 12:22PM: No such file or directory
grep: 0:00.57: No such file or directory
...
好像ps的输出已作为要在grep命令中搜索的文件。我不知道自己在做什么错。
那么,如何在make中编写半复杂的bash命令?我希望有一个比“仅运行bash脚本而不是将命令放在makefile中”的更好的答案。
答案 0 :(得分:3)
在配方中使用$(shell...)
是一种反模式。除非在最不寻常的,奇怪的情况下,否则您永远都不要这样做。食谱 IS 是一个外壳脚本,因此运行$(shell ...)
充其量是多余的。
第二,阅读the shell
function的作用:
shell
函数执行的功能与大多数shell中的反引号('`')相同:它会执行命令扩展。这意味着它将shell命令作为参数并求值到命令的输出。
所以您对正在发生的事情的理解是完全正确的,而这正是它应该做的。
您应该这样简单地写:
all:
ps aux | grep -i someProcName