我很困惑为什么 makefile 中的“| true”与“|| true”具有相同的效果

我很困惑为什么 makefile 中的“| true”与“|| true”具有相同的效果

我有一个 makefile,在删除文件之前我会在其中停止服务。当它无法停止服务时,它会因错误而中断。这显然是不需要的,所以我想添加|| true但错过了|.进行中:

stop service foo | true
rm /etc/init/foo.conf

我很困惑为什么这会起作用以及发生了什么。这是否意味着它true是一个应用程序而不仅仅是一个关键字?它们是一样的吗?有充分的理由使用吗| true

答案1

true并且false核心工具(通常也是 shell 内置函数)只返回 0 和非 0,适用于您碰巧需要该行为的情况。从手册页:

true - 不执行任何操作,成功
false - 不执行任何操作,失败

因此,您将输出从管道传输stop service foo到 into true,它会忽略它并返回 0。从技术上讲,它是有效的,但您可能应该使用它,|| true以便很明显您的意图是什么;确实没有理由将输出通过管道传输到不使用它的程序中

相关内容