GNU/Linux >> Znalost Linux >  >> Linux

Proč opustit kód 141 pomocí grep -q?

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 .


Linux
  1. Bash Prompt s posledním výstupním kódem

  2. Aplikace C++ končí s ukončovacím kódem 143 - co to znamená?

  3. Návratový kód grep pro Linux

  1. Ukončovací kódy příkazového řádku Bash byly demystifikovány

  2. Výpis všech e-mailových adres v souboru s grep

  3. Jak grep ps výstup s hlavičkami

  1. Výchozí kód ukončení při ukončení procesu?

  2. Grep s logickými operátory?

  3. Proč Bash neukládá příkazy, které začínají mezerami?