为什么我在Makefile中使用pgrep
时会发现进程ID,但在shell中运行时却没有?例如,假设我有这个makefile
SHELL = /bin/bash
tst:
if pgrep -f askdfkasdfj ; then \
kill $$(pgrep -f askdfkasdfj); \
fi
当我运行make tst
时,它会找到一个进程并进入if
正文,即使没有名称为" askdfkasdfj"的进程。我试图用ps aux | grep ...
替换pgrep
,这在这个实例中正常工作,并遇到了这个问题。
答案 0 :(得分:1)
我认为它找到了来自makefile本身的命令。 make
执行的操作如下:
/bin/bash -c 'if pgrep -f askdfkasdfj ; then kill $$(pgrep -f askdfkasdfj); fi'
这包含askdfkasdfj
参数中的-c
,因此匹配。
但我不确定为什么当你使用ps aux | grep
时这也没有发生。