簡體   English   中英

在Makefile中運行lint命令的反向退出代碼

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM