Was ist der korrekte Wert von $? in einer Pipeline?

8

Ich war etwas gestört, das folgende Verhalten zu finden:

%Vor%

Intuitiv sieht es so aus, als würde zsh es richtig machen, während bash und ksh falsch liegen. $? ist 'der Exit-Status der zuletzt ausgeführten Pipeline', die jeweils 1 sein sollte. Beachten Sie, dass false | echo $? auch 0 in ksh und bash ausgibt. Ist der Standard in diesem Punkt flexibel (dh das Verhalten ist nicht spezifiziert) oder sind bash und ksh nicht konform? Ich bin auch neugierig zu wissen, was Bash und Ksh tun, um das falsch zu machen.

%Vor%     
William Pursell 18.04.2015, 12:32
quelle

1 Antwort

4

POSIX sagt:

  

$?       Expandiert in den Dezimal-Exit-Status der letzten [Befehl oder] Pipeline ...

Bitte beachten Sie den Kommentar von @ lurker . Bash in seiner aktuellen Version 4.3.11 verhält sich genauso wie zsh .

Was in bash und zsh passiert, ist, dass $? durch den Befehl vor der Pipe gesetzt wird und nicht innerhalb der Pipe geändert wird. Deshalb ist das erwartete Ergebnis der Rückgabewert von false - & gt; %Code%. Und genau das setzt POSIX fest.

Ich konnte keine Dokumentation finden, die das Verhalten 1 beschreibt. Ich kann nur annehmen, dass ksh vor der Ausführung der Pipe ksh zurücksetzt, da der folgende Code funktioniert:

%Vor%

Wahrscheinlich sollte dies als Fehler in $? abgelegt werden. Ich bin mir jedoch nicht sicher, ob dieses Verhalten von POSIX genau genug angegeben wird.

    
hek2mgl 18.04.2015, 12:36
quelle

Tags und Links