[英]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.