trap "$instructions" SIGSEGV
bẫy lỗi phân đoạn trong chính vỏ.
Nếu bạn chạy tập lệnh của mình bên dưới set -e
, bạn có thể đặt bẫy EXIT
(hoặc 0
). Nó sẽ được thực thi khi tập lệnh của bạn kết thúc (cho dù do lệnh trả về trạng thái khác không, hoặc bằng cách gọi rõ ràng exit
hoặc bằng cách rơi ra khỏi phần cuối của tập lệnh). Để kiểm tra lỗi phân đoạn, hãy kiểm tra $?
khi vào bẫy. (Lưu ý rằng $?
có thể là 139 vì chương trình trở lại bình thường với trạng thái 139; điều này là có thể tránh được nếu bạn thực hiện xử lý trong trình bao.)
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
Trong bash hoặc ksh hoặc zsh, bạn không cần sử dụng set -e
để thực hiện bẫy sau mỗi lệnh trả về trạng thái khác không, ERR
thay vào đó bạn có thể đặt bẫy . Như trước đây, bạn cần kiểm tra $?
khi vào bẫy và 139 có thể (nhưng hiếm khi) có nghĩa là chương trình trả về trạng thái này.
trap "echo 'something happened!'" {1..64}
và tôi vẫn không nhận được bất cứ điều gì. Tôi thậm chí đã thử vớiset -bm
vàset -o monitor
nhưng nada.