繁体   English   中英

在Makefile中运行lint命令的反向退出代码

[英]Inverted exit code running lint command in a Makefile

我的Makefile中的此项愉快地抓取了我的PHP文件,并对它们运行PHP的内置皮棉:

lint:
    @find . -name "*.php" | grep -v "^./lib" | grep -v "^./vendor" | xargs -I{} php -l '{}' | grep -v "No syntax errors detected"

grep -v禁止所有“未检测到语法错误”消息,否则将在仍然出现失败消息(如果有)的情况下产生该消息。

问题在于,在没有语法错误的情况下,模具会消失;在没有错误的情况下,模具会继续存在。 这是因为grep -v的退出代码。 它认为找到某件事成功(错误消息),却一无所获失败(所有文件都通过lint传递)。

我看着用否定grep的最终调用的退出代码!

lint:
    @find . -name "*.php" | grep -v "^./lib" | grep -v "^./vendor" | xargs -I{} php -l '{}' | ! grep -v "No syntax errors detected"

但这给了我:

/bin/sh: -c: line 0: syntax error near unexpected token `!'

我可以用! 在命令行上可以,但是在这种情况下由于某种原因它不起作用。

我很好奇如何在pipeline / xargs / grep / make的上下文中否定退出代码。 但是大多数情况下,我想解决我的问题-接受所有建议,使我的Makefile中的工作棉绒目标正常运行,可以做正确的事情。

管道的返回值是它的最后一条命令返回的值。 因此,您只需要还原完整命令行的状态:

lint:
    @! find ... | grep -v "No syntax errors detected"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM