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 .