trap "$instructions" SIGSEGV
уловлює дефекти сегментації у самій оболонці.
Якщо ви запустите свій скрипт під set -e
, ви можете поставити пастку EXIT
(або 0
). Він буде виконаний, коли ваш скрипт припиняється (чи то через команду, що повертає ненульовий статус, чи явно зателефонувавши exit
або випавши з кінця сценарію). Щоб перевірити наявність несправності сегментації, перевірте $?
вхід у пастку. (Зверніть увагу, що це $?
може бути 139, оскільки програма нормально поверталася зі статусом 139; цього можна уникнути, якщо ви обробляєте в оболонці.)
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
У bash або ksh або zsh вам не потрібно використовувати set -e
для виконання пастки після кожної команди, яка повертає ненульовий статус, ви можете ERR
замість цього поставити пастку . Як і раніше, вам потрібно перевірити $?
вхід у пастку, і 139 може (але рідко це означає), що програма повернула цей статус.
trap "echo 'something happened!'" {1..64}
і досі нічого не отримую. Я навіть пробувавset -bm
і,set -o monitor
але нада.