grepが見つかった場合は1で終了し、見つからない場合は0で終了します。

grepが見つかった場合は1で終了し、見つからない場合は0で終了します。

Error 1Makefileをビルドし、見つかった場合(一致)エラーを返し、見つからない場合は成功を返す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ですgrepError 1find

したがって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

おすすめ記事