2015-11-25 60 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

啊,就這麼簡單!謝謝! –