Ini karena grep -q
keluar segera dengan status nol segera setelah kecocokan ditemukan. zfs
perintah masih menulis ke pipa, tetapi tidak ada pembaca (karena grep
telah keluar), sehingga dikirim SIGPIPE
sinyal dari kernel dan keluar dengan status 141
.
Tempat umum lainnya di mana Anda melihat perilaku ini adalah dengan head
. mis.
$ seq 1 10000 | head -1
1
$ echo ${PIPESTATUS[@]}
141 0
Dalam hal ini, head
baca baris pertama dan akhiri yang menghasilkan SIGPIPE
sinyal dan seq
keluar dengan 141
.
Lihat "Sinyal SIGPIPE yang Terkenal" dari Panduan Programmer Linux.
Opsi lain adalah tidak menggunakan pipa, tetapi menggunakan substitusi proses:
grep -q tank <(daftar zfs)
Pembaruan:Saya rasa hal yang sama, karena proses yang dijalankan di dalam tanda kurung juga akan menerima sigpipe.
Saya tidak terbiasa dengan zfs list
, tapi saya kira itu mengeluh tentang keluaran standarnya yang ditutup - grep -q
keluar segera ketika kecocokan ditemukan, tidak seperti grep
.