Thread Returncode aus der Pipe (7 answers)
Opened by roli at 2009-12-16 15:39

murphy
 2009-12-16 16:42
#129441 #129441
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Tja, das Problem ist, dass Du so tust, als gehöre der Statuscode den Du in Zeile 8 ausgibst zum Kommando in Zeile 7, der in Zeile 18 zum Kommando in Zeile 17 und der in Zeile 28 zum Kommando in Zeile 27.

perlvar sagt aber ganz klar, dass $? erst beim Schließen der Pipe zu einem Subprozess gesetzt wird -- das ist im Übrigen auch völlig logisch, denn vorher läuft der Subprozess ja noch und kann folglich noch keinen Statuscode zurückgegeben haben.

In Wahrheit gibst Du also in Zeile 18 den Status des Kommandos aus Zeile 7 aus und in Zeile 28 den des Kommandos aus Zeile 17. In Zeile 8 gibst Du irgendeinen nicht spezifizierten Wert aus.

Im Übrigen solltest Du noch beachten, dass Perl in $? mehr Informationen speichert als eine Shell normalerweise in $? ablegt. Um den Statuscode des ausgeführten Programmes zu ermitteln, musst Du $? >> 8 berechnen. Die Ausgabe von Codezeile 18 besagt also, dass sich das SSH-Kommando aus Codezeile 7 mit dem Statuscode 127 beendet hat, was gemäß Konvention bedeutet, dass ein auszuführendes Subprogramm nicht gefunden wurde.

Fazit: Dein Programm liefert genau das Ergebnis, welches man erwarten würde :-)
When C++ is your hammer, every problem looks like your thumb.

View full thread Returncode aus der Pipe