trap "$instructions" SIGSEGV
menjebak kesalahan segmentasi di shell itu sendiri.
Jika Anda menjalankan skrip Anda di bawah set -e
, Anda dapat menempatkan jebakan pada EXIT
(atau 0
). Ini akan dieksekusi ketika skrip Anda berakhir (apakah karena perintah mengembalikan status bukan nol, atau dengan secara eksplisit memanggil exit
atau dengan jatuh dari ujung skrip). Untuk menguji kesalahan segmentasi, periksa $?
masuk ke perangkap. (Catatan yang $?
mungkin 139 karena program kembali normal dengan status 139; ini dapat dihindari jika Anda melakukan pemrosesan di shell.)
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
Di bash atau ksh atau zsh, Anda tidak perlu menggunakan set -e
untuk menjalankan jebakan setelah setiap perintah yang mengembalikan status bukan nol, Anda dapat menempatkan jebakan pada ERR
. Seperti sebelumnya, Anda perlu memeriksa $?
entri yang masuk ke perangkap, dan 139 dapat (tetapi jarang) menunjukkan bahwa program mengembalikan status ini.
Gilles 'SANGAT berhenti menjadi jahat'
sumber
trap "echo 'something happened!'" {1..64}
dan masih tidak mendapatkan apa-apa. Aku bahkan mencobaset -bm
dan denganset -o monitor
tapi nada.trap "echo 'something happened'" {1..31}
bekerja untuk saya (meninggalkan!
dan spesifikasi sinyal yang mengarah kebash: trap: XX: invalid signal specification
).