在我的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工作目标皮棉,做正确的事的任何建议。
这个答案似乎不相关的*相当*回答这个问题:http://stackoverflow.com/questions/6805253/how-do-you-abort-on -shell-命令错误 - 在-的makefile –