我正在创建一个在 GitHub Actions 中执行的简单命令,该命令构建一个 Makefile 并在找到(匹配)时返回错误Error 1
,在未找到时返回成功...
我似乎要么让它失败,即使没有任何问题,要么当有问题时不失败。
这是我的整个命令:
find . -name "Makefile" -exec sh -c 'cd "$(dirname "$0")" && make' {} \; | grep -zqvE "Error 1"
exit 1
如果它找到这样的输出,我希望它:
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [compile] Error 1
或者0
其他情况
答案1
! find ...as in the question... | grep -qF 'Error 1'
初始!
导致管道的退出状态被否定。管道的退出状态是命令的退出状态,如果在命令的输出中找到grep
该字符串,则该退出状态为零。Error 1
find
因此,如果Error 1
在输出中找到,grep
则以零退出状态退出,并将!
其反转为非零值。
请注意,make
可能会将诊断消息写入其标准错误流,在这种情况下,您必须使用以下命令重定向输出2>&1
:
! find ...as in the question... 2>&1 | grep -qF 'Error 1'
另请注意,grep
一旦找到匹配项就会终止,find
一旦尝试写入死管道,就会由于接收到 SIGPIPE 信号而终止。
您尝试使用grep
with -v
。您可以将其视为-v
问题“是否有与此模式不匹配的行?”。在这种情况下,有将要是行不匹配Error 1
,无论是否Error 1
发生。