trap "$instructions" SIGSEGV
captura falhas de segmentação no próprio shell.
Se você executar seu script em set -e
, poderá colocar uma interceptação em EXIT
(ou 0
). Ele será executado quando seu script for finalizado (devido a um comando que retorna um status diferente de zero ou pela chamada explícita de exit
ou pela queda do final do script). Para testar uma falha de segmentação, verifique $?
na entrada do trap. (Observe que $?
poderia ser 139 porque o programa retornou normalmente com o status 139; isso é evitável se você fizer seu processamento no shell.)
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
No bash ou ksh ou zsh, você não precisa usar set -e
para executar uma interceptação após cada comando que retorna um status diferente de zero, você pode colocar uma interceptação em ERR
. Como antes, você precisa verificar $?
na entrada do trap, e 139 pode (mas raramente) significa que o programa retornou este status.