Да, вы должны изменить сценарий "unbuffer", чтобы изменить способ "unbuffer" ждать завершения дочернего процесса.
Из ожидаемой документации:
Дополнительные элементы могут появиться в конце возвращаемого значения из ожидания. Необязательный пятый элемент идентифицирует класс информации. В настоящее время единственным возможным значением для этого элемента является CHILDKILLED, в этом случае следующие два значения - это имя сигнала в стиле C и краткое текстовое описание.
В сценарии "unbuffer" найдите exit [lindex [wait] 3]
и замените его следующим кодом:
set result [wait]
send_user "wait returned: $result\n"
if { [llength $result] == 4 } {
exit [lindex $result 3]
} else {
exit 1
}
После этой модификации вы четко увидите разницу. Например, запустив скрипт b.sh
вы получите что-то вроде этого:
wait returned: 8606 exp6 0 0 CHILDKILLED SIGSEGV {segmentation violation}
Конечно, вы можете изменить значение exit 1
на любое другое значение. Вы можете выйти с 139, если хотите, но значение не изменится в соответствии с сигналом, если вы не добавите еще больше кода в сценарий "unbuffer".