Tak, musisz zmodyfikować skrypt „unbuffer”, aby zmienić sposób, w jaki „unbuffer” czeka na zakończenie procesu potomnego.
Z dokumentacji oczekiwanej:
Dodatkowe elementy mogą pojawić się na końcu wartości zwracanej z oczekiwania. Opcjonalny piąty element identyfikuje klasę informacji. Obecnie jedyną możliwą wartością dla tego elementu jest CHILDKILLED, w którym to przypadku dwie następne wartości to nazwa sygnału w stylu C i krótki opis tekstowy.
W skrypcie „unbuffer” poszukaj go exit [lindex [wait] 3]
i zastąp go następującym kodem:
set result [wait]
send_user "wait returned: $result\n"
if { [llength $result] == 4 } {
exit [lindex $result 3]
} else {
exit 1
}
Po tej modyfikacji wyraźnie zobaczysz różnicę. Na przykład po uruchomieniu b.sh
skryptu otrzymasz coś takiego:
wait returned: 8606 exp6 0 0 CHILDKILLED SIGSEGV {segmentation violation}
Możesz oczywiście zmienić wartość o exit 1
dowolną wartość. Możesz wyjść z 139, jeśli chcesz, ale wartość nie zmieni się, aby dopasować sygnał, chyba że dodasz jeszcze więcej kodu do skryptu „unbuffer”.