trap "$instructions" SIGSEGV
detecta falhas de segmentação no próprio shell.
Se você executar seu script em set -e
, poderá colocar uma armadilha em EXIT
(ou 0
). Ele será executado quando o script terminar (seja devido a um comando que retorna um status diferente de zero, seja por uma chamada explícita exit
ou por uma queda no final do script). Para testar uma falha de segmentação, verifique $?
a entrada na armadilha. (Observe que $?
pode ser 139 porque o programa retornou normalmente com o status 139; isso é evitável se você processar seu shell.)
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
No bash ou ksh ou zsh, você não precisa set -e
executar uma interceptação após cada comando que retorna um status diferente de zero, você pode colocar uma interceptação ERR
. Como antes, você precisa verificar $?
a entrada na armadilha e 139 pode (mas raramente o faz) significar que o programa retornou esse status.
Gilles 'SO- parar de ser mau'
fonte
trap "echo 'something happened!'" {1..64}
e ainda não recebo nada. Eu até tryied comset -bm
eset -o monitor
mas nada.trap "echo 'something happened'" {1..31}
funciona para mim (deixando de fora as!
especificações de sinal e as que levam abash: trap: XX: invalid signal specification
).