助けが必要です - GNU / LINUX bashのシェルスクリプト環境で:
私はいつも使用しますset -e
。常に望むわけではありませんが、終了ステータスがパターンを見つけることができないことを示すときにgrep
スクリプトの実行を終了したいと思います。grep
1
この問題を解決する方法は次のとおりです。
(私を試してみてください)そのような方法でgrepを呼び出す
と、将来の管理者がアクティブになるまで希望の動作を得ることができます。また、私はアクティブにするのが好きなので、これは私には適していません。set +o pipefail
grep 'p' | wc -l
pipefail
pipefail
(2回試行)パターンに一致する行のみを
使用するsed
か印刷してから、一致する行を使用して一致するパターンをテストします。 toを使用することが私の実際の問題に対する解決策であると思われるので、このオプションは気に入らません。awk
wc
sed
grep
(試行III)
これは私が一番好きではありません。次のようになります。set +e; grep 'p'; set-e
どんな洞察力/慣用句にも大変感謝いたします。ありがとうございます。
ベストアンサー1
条件にgrepを入れるif
こともでき、終了状態に興味がなければ|| true
。
例:grep
シェルの終了
$ bash
$ set -e
$ echo $$
33913
$ grep foo /etc/motd
$ echo $$
9233
解決策1:0以外の終了ステータスを削除する
$ bash
$ set -e
$ echo $$
34074
$ grep foo /etc/motd || true
$ echo $$
34074
解決策2:終了ステータスを明示的にテストする
$ if ! grep foo /etc/motd; then echo not found; fi
not found
$ echo $$
34074
Bashのマニュアルページディスカッションからset -e
:
失敗したコマンドが直ちにコマンドリストの一部である場合、シェルは終了しません。しかし、または~まで キーワード、テストの一部もしまたは一生予約語、実行されたコマンドの一部 &&または│リストされた最後のコマンドの後のコマンドは除外&&または│、最後のコマンドを除くパイプライン内のすべてのコマンドまたは戻り値が次のようなコマンド!。