trap "$instructions" SIGSEGV
wychwytuje błędy segmentacji w samej powłoce.
Jeśli uruchomisz skrypt set -e
, możesz umieścić pułapkę na EXIT
(lub 0
). Zostanie on wykonany po zakończeniu skryptu (niezależnie od tego, czy polecenie zwróci status niezerowy, czy też zostanie jawnie wywołane exit
lub odpadnie od końca skryptu). Aby przetestować pod kątem błędu segmentacji, sprawdź $?
wejście do pułapki. (Należy pamiętać, że $?
może to być 139, ponieważ program powrócił normalnie ze statusem 139; można tego uniknąć, jeśli wykonujesz przetwarzanie w powłoce).
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
W bash, ksh lub zsh nie trzeba używać set -e
do wykonania pułapki po każdym poleceniu, które zwraca stan niezerowy, można ERR
zamiast tego zastosować pułapkę . Tak jak poprzednio, musisz sprawdzić $?
przy wejściu do pułapki, a 139 może (ale rzadko robi) oznaczać, że program zwrócił ten status.
Gilles „SO- przestań być zły”
źródło
trap "echo 'something happened!'" {1..64}
i wciąż nic nie dostaję. I nawet z tryiedset -bm
iset -o monitor
ale nada.trap "echo 'something happened'" {1..31}
działa dla mnie (pomijając te!
i te specyfikacje sygnałów, które prowadzą dobash: trap: XX: invalid signal specification
).