Error 1
Makefileをビルドし、見つかった場合(一致)エラーを返し、見つからない場合は成功を返すGitHub Actionsで実行される単純なコマンドを作成しています。
問題がなくても失敗したり、問題があっても失敗しないようです。
これは私の完全なコマンドです。
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'
最初は!
パイプの終了状態が無効になります。パイプの終了状態はコマンドの終了状態であり、その文字列がコマンドの出力にある場合は0です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
で使用しようとしています-v
。-v
「このパターンと一致しない行はありますか?」という質問で考えてください。この場合、〜するError 1
発生するかどうかにかかわらず、行の不一致ですError 1
。