Oui, vous devez modifier le script "unbuffer" pour changer la manière dont "unbuffer" attend que le processus enfant se termine.
À partir de la documentation d'expect:
Des éléments supplémentaires peuvent apparaître à la fin de la valeur de retour de wait. Un cinquième élément facultatif identifie une classe d'informations. Actuellement, la seule valeur possible pour cet élément est CHILDKILLED, auquel cas les deux valeurs suivantes sont le nom du signal de style C et une brève description textuelle.
Dans le script "unbuffer", cherchez exit [lindex [wait] 3]
et remplacez-le par le code suivant:
set result [wait]
send_user "wait a retourné : $result\n"
if { [llength $result] == 4 } {
exit [lindex $result 3]
} else {
exit 1
}
Après cette modification, vous verrez clairement la différence. Par exemple, en exécutant votre script b.sh
, vous obtiendrez quelque chose comme ceci:
wait a retourné : 8606 exp6 0 0 CHILDKILLED SIGSEGV {violation de la segmentation}
Vous pouvez bien sûr changer la valeur de exit 1
par la valeur de votre choix. Vous pouvez sortir avec 139 si vous le souhaitez, mais la valeur ne changera pas pour correspondre au signal à moins d'ajouter encore plus de code au script "unbuffer".