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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pgrep在makefile中返回true但在shell中不返回相关的知识,希望对你有一定的参考价值。

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

答案

我认为它找到了来自makefile本身的命令。 make正在执行类似的事情:

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

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

但是我不确定为什么当你使用ps aux | grep时这种情况也不会发生。

以上是关于pgrep在makefile中返回true但在shell中不返回的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 奇怪的 saveAll 问题。返回 true,但在数据库中没有任何内容

比较具有相同项目但在随机位置的数组时如何返回true?

使用 Makefile 编译失败但在命令行中成功

该复选框在未选中时不能返回 False,但在选中时可以返回 True

Shell脚本杀掉除自己外的旧进程

makefile 和 sh 文件有啥区别