GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum Exit-Code 141 mit grep -q?

Das liegt daran, dass grep -q wird sofort mit einem Nullstatus beendet, sobald eine Übereinstimmung gefunden wird. Die zfs Der Befehl schreibt immer noch in die Pipe, aber es gibt keinen Reader (weil grep ist beendet), also wird ein SIGPIPE gesendet Signal vom Kernel und beendet sich mit dem Status 141 .

Ein weiterer häufiger Ort, an dem Sie dieses Verhalten sehen, ist bei head . zB

$ seq 1 10000 | head -1
1

$ echo ${PIPESTATUS[@]}
141 0

In diesem Fall head las die erste Zeile und beendete das, was einen SIGPIPE erzeugte Signal und seq mit 141 beendet .

Siehe "Das berüchtigte SIGPIPE-Signal" aus dem Linux Programmer's Guide.


Eine andere Möglichkeit wäre, keine Pipe zu verwenden, sondern eine Prozessersetzung:

grep -q tank <(zfs list)

Update:Ich denke, es ist dasselbe, da der Prozess, der in Klammern ausgeführt wird, auch sigpipe empfängt.


Ich bin mit zfs list nicht vertraut , aber ich denke, es beschwert sich darüber, dass seine Standardausgabe geschlossen ist - grep -q wird im Gegensatz zu grep sofort beendet, wenn eine Übereinstimmung gefunden wird .


Linux
  1. Warum ich bei xterm bleibe

  2. Warum ich mich in Antergos Linux verliebt habe

  3. Bash-Befehlszeilen-Exit-Codes entmystifiziert

  4. Standard-Exit-Code, wenn der Prozess beendet wird?

  5. Grep mit logischen Operatoren?

Bearbeiten von Text in der Befehlszeile mit grep

Grep-Befehl in Linux (mit Beispielen)

10 praktische Beispiele für Regex mit grep

C++-Anwendung wird mit Exit-Code 143 beendet – was bedeutet das?

Warum stürzt dieser Code bei aktivierter Adress-Randomisierung ab?

So grep ps-Ausgabe mit Headern