GNU/Linux >> Linux の 問題 >  >> Linux

grep -q でコード 141 を終了するのはなぜですか?

これは grep -q のためです 一致が見つかるとすぐにゼロのステータスで終了します。 zfs コマンドはまだパイプに書き込み中ですが、リーダーがありません (grep のため) が終了したため)、SIGPIPE が送信されます カーネルからのシグナルで、141 のステータスで終了します .

この動作が見られるもう 1 つの一般的な場所は、head の場合です。 .例

$ seq 1 10000 | head -1
1

$ echo ${PIPESTATUS[@]}
141 0

この場合、head 最初の行を読んで終了し、 SIGPIPE を生成しました シグナルと seq 141 で終了しました .

The Linux Programmer's Guide の「The Infamous SIGPIPE Signal」を参照してください。


もう 1 つのオプションは、パイプを使用せずにプロセス置換を使用することです:

grep -q tank <(zfs リスト)

更新:括弧内で実行されるプロセスも sigpipe を受け取るため、同じことだと思います。


zfs list はよく知らない 、しかし、標準出力が閉じていることについて不平を言っていると思います- grep -q grep とは異なり、一致が見つかるとすぐに終了します .


Linux
  1. xtermを使い続ける理由

  2. AntergosLinuxに恋をした理由

  3. Bashコマンドラインの終了コードがわかりやすく説明されています

  1. 論理演算子を使用したGrep?

  2. なぜBashはスペースで始まるコマンドを保存しないのですか?

  3. AwkまたはGrepでグループをキャプチャしますか?

  1. カラー出力をgrepする方法

  2. 最後の終了コードを含む Bash プロンプト

  3. C++ アプリケーションが 143 終了コードで終了する - どういう意味ですか?