在我的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 –