pgrep在makefile中返回true但在shell中不返回

时间:2018-03-01 00:48:32

标签: bash makefile process grep

为什么我在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,这在这个实例中正常工作,并遇到了这个问题。

1 个答案:

答案 0 :(得分:1)

我认为它找到了来自makefile本身的命令。 make执行的操作如下:

/bin/bash -c 'if pgrep -f askdfkasdfj ; then kill $$(pgrep -f askdfkasdfj); fi'

这包含askdfkasdfj参数中的-c,因此匹配。

但我不确定为什么当你使用ps aux | grep时这也没有发生。