これは 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
とは異なり、一致が見つかるとすぐに終了します .