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 .