Důvodem je grep -q
okamžitě opustí s nulovým stavem, jakmile je nalezena shoda. zfs
příkaz stále zapisuje do roury, ale neexistuje žádná čtečka (protože grep
skončilo), takže se odešle SIGPIPE
signál z jádra a ukončí se se stavem 141
.
Dalším běžným místem, kde toto chování vidíte, je head
. např.
$ seq 1 10000 | head -1
1
$ echo ${PIPESTATUS[@]}
141 0
V tomto případě head
přečetl první řádek a skončil, což vygenerovalo SIGPIPE
signál a seq
ukončeno s 141
.
Viz "Neslavný signál SIGPIPE" z The Linux Programmer's Guide.
Další možností by bylo nepoužít rouru, ale použít substituci procesu:
grep -q tank <(seznam zfs)
Aktualizace:Myslím, že je to totéž, protože proces spuštěný v závorkách také obdrží sigpipe.
Neznám zfs list
, ale myslím, že si stěžuje na zavřený standardní výstup - grep -q
ukončí se okamžitě, když je nalezena shoda, na rozdíl od grep
.