trap "$instructions" SIGSEGV
atrapa las fallas de segmentación en el propio shell.
Si ejecuta su script debajo set -e
, puede poner una trampa en EXIT
(o 0
). Se ejecutará cuando finalice su secuencia de comandos (ya sea debido a que un comando devuelve un estado distinto de cero, o llamando explícitamente exit
o cayendo al final de la secuencia de comandos). Para probar una falla de segmentación, verifique la $?
entrada a la trampa. (Tenga en cuenta que $?
podría ser 139 porque el programa regresó normalmente con el estado 139; esto se puede evitar si realiza el procesamiento en el shell).
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
En bash o ksh o zsh, no necesita usar set -e
para ejecutar una trampa después de cada comando que devuelve un estado distinto de cero, en su lugar, puede poner una trampa ERR
. Como antes, debe verificar la $?
entrada a la trampa, y 139 puede (pero rara vez lo hace) significar que el programa devolvió este estado.
Gilles 'SO- deja de ser malvado'
fuente
trap "echo 'something happened!'" {1..64}
y todavía no consigo nada. Incluso intenté conset -bm
yset -o monitor
pero nada.trap "echo 'something happened'" {1..31}
funciona para mí (omitiendo!
las especificaciones de señal y esas que conducen abash: trap: XX: invalid signal specification
).