Unbuffer schluckt den Exit-Status des abgebrochenen Prozesses

735
frankc

Der Expect-Befehl "Unbuffer" scheint den Exit-Status seines untergeordneten Objekts zu verschlucken, wenn der Prozess beendet wird. Gibt es etwas, was getan werden kann, um dieses Verhalten zu stoppen? Der Exitstatus wird nicht verschluckt, wenn der untergeordnete Prozess im Allgemeinen einen Exitstatus ungleich Null hat.

Betrachten Sie zwei Bash-Skripte, um dieses Verhalten zu beobachten:

a.sh:  exit 1 

vs

b.sh: kill -11 $$ 

dann auf jedem von ihnen die Pufferung aufheben und $? drucken. Im ersten Fall sehe ich 1, im zweiten Fall aber 0, wenn ich mit 139 rechne

1

1 Antwort auf die Frage

3
user210584

Ja, Sie müssen das "Unbuffer" -Skript ändern, um die Art und Weise zu ändern, auf die "Unbuffer" wartet, bis der untergeordnete Prozess beendet ist.

Von der Dokumentation erwarten:

Zusätzliche Elemente werden möglicherweise am Ende des Rückgabewerts von wait angezeigt. Ein optionales fünftes Element identifiziert eine Informationsklasse. Derzeit ist der einzige mögliche Wert für dieses Element CHILDKILLED. In diesem Fall sind die nächsten zwei Werte der C-Signalname und eine kurze Textbeschreibung.

Suchen Sie im Skript "Unbuffer" nach exit [lindex [wait] 3]und ersetzen Sie es durch den folgenden Code:

set result [wait] send_user "wait returned: $result\n" if { [llength $result] == 4 } { exit [lindex $result 3] } else { exit 1 } 

Nach dieser Änderung werden Sie den Unterschied deutlich sehen. Wenn Sie beispielsweise Ihr b.shSkript ausführen, erhalten Sie Folgendes:

wait returned: 8606 exp6 0 0 CHILDKILLED SIGSEGV

Sie können natürlich den Wert exit 1um jeden gewünschten Wert ändern . Sie können mit 139 abbrechen, wenn Sie möchten, der Wert wird jedoch nicht an das Signal angepasst, wenn Sie dem "Unbuffer" -Skript noch mehr Code hinzufügen.