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
нада.trap "echo 'something happened'" {1..31}
работает для меня (опуская!
и те характеристики сигнала, которые приводят кbash: trap: XX: invalid signal specification
).