Bash 在Make文件中使用管道

Bash 在Make文件中使用管道,bash,makefile,Bash,Makefile,我正在尝试创建一个使用管道的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 direc

我正在尝试创建一个使用管道的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”

在配方中使用
$(shell…
是一种反模式。除非在最不寻常、最奇怪的情况下,否则你永远不应该这样做。配方是一个shell脚本,因此运行
$(shell…
充其量是多余的

其次,阅读以下内容:

shell
函数执行的功能与反引号(“`”)在大多数shell中执行的功能相同:它执行命令扩展。这意味着它将shell命令作为参数,并计算为命令的输出

所以你对发生的事情的理解是完全正确的,这正是它应该做的

您应该简单地写为:

all:
        ps aux | grep -i someProcName
:-(我不知道我是从哪里想到必须用$(shell…)包装命令的。谢谢!