Да, вы должны изменить сценарий «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
Конечно, вы можете изменить значение exit 1
на любое значение, которое вы пожелаете. Вы можете выйти с помощью 139, если хотите, но значение не изменится в соответствии с сигналом, если вы не добавите еще больше кода в сценарий «unbuffer».