2015-11-25 31 views
0

在我的Makefile此项高高兴兴地抓取我的PHP文件并运行PHP的内置皮棉他们:在一个Makefile运行lint命令倒退出代码

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

grep -v抑制所有“未检测到语法错误”如果有的话,在仍然失败的消息时可能产生的消息。

的问题是,使在没有语法错误去世,时有错误仍在继续。这是因为grep -v的退出码。它认为,当它发现的东西(错误消息)已经成功了,当它发现什么(通过皮棉所有文件)失败。

我看着否定最后调用的退出代码与!到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 `!' 

我可以在命令行罚款,但在这使用!上下文它由于某种原因不起作用。

我很好奇我怎么否定流水线/ xargs的/ grep的范围内退出码/制作。但主要是我要解决我的问题 - 开放,导致在我的Makefile工作目标皮棉,做正确的事的任何建议。

+0

这个答案似乎不相关的*相当*回答这个问题:http://stackoverflow.com/questions/6805253/how-do-you-abort-on -shell-命令错误 - 在-的makefile –

回答

2

管的返回值是一个这是由其最后一个命令返回。所以,你只需要恢复完整的命令行状态:

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

啊,就这么简单!谢谢! –