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але нада.