grepの出力を/ dev / nullにリダイレクトするのはなぜですか?

grepの出力を/ dev / nullにリダイレクトするのはなぜですか?

次の行を考えてみましょう。

${libdir}/bin/licenseTool check "${SERIAL}" "${VERSION}" "${PRODUCT}" ${libdir} | grep '^200' >/dev/null

結果が次の場合、出力でパターンを見つけることのポイントは何ですか?それ捨てられたのでしょうか?

そして、このような行がbashスクリプトの最後のエントリとして現れる場合、終了値はスクリプト呼び出し元に返されますか、それとも無視されますか? (私はこれが単に副作用として行われたかどうか、呼び出し元に何かを返すために行われたと仮定できると思います。)

答え1

あなたの疑いは正しいです。スクリプトの最後のコマンドの終了状態が呼び出し環境に渡されます。したがって、grepスクリプトはデータのどのエントリと一致する場合は終了状態 0 を返し、一致しない場合は現在の状態 1 を返し、エラーが発生した場合は終了状態 2 を返します。

答え2

破棄されたping出力の主な点は、grep作成者が戻り状態だけを望んでいることですgrep。彼/彼女はちょうどパターンが一致するかどうかを知りたいです。あなたの場合、最後のコマンドはgrep前のコマンドの出力に200

最新のPOSIXシステムでは、次のコマンドを使用してこれをすべて実行できます。grep -q次にリダイレクトしないでください/dev/null

... | grep -q '^200'

grep -q多少の副作用がありますのでご注意ください。ありがとうございます。スティーブン・チャジェラス彼のコメントに言及された。grep -q最初の一致が見つかるとすぐに終了します。終了licenseTool後も引き続き何かを書くとgrepSIGPIPEを受け取ります。

関連情報