script1.sh:Bash: Tại sao tập lệnh mẹ không chấm dứt trên SIGINT khi tập lệnh con bẫy SIGINT?
#!/bin/bash
./script2.sh
echo after-script
script2.sh:
#!/bin/bash
function handler {
exit 130
}
trap handler SIGINT
while true; do true; done
Khi tôi bắt đầu script1.sh từ một thiết bị đầu cuối, và sau đó sử dụng tổ hợp phím Ctrl + C để gửi SIGINT vào nhóm quá trình của nó, tín hiệu bị mắc kẹt bởi script2.sh và khi script2.sh chấm dứt, script1.sh in "after-script". Tuy nhiên, tôi đã mong đợi script1.sh để ngay lập tức chấm dứt sau khi dòng gọi script2.sh. Tại sao đây không phải là trường hợp trong ví dụ này?
nhận xét bổ sung (chỉnh sửa):
Như script1.sh và script2.sh đều nằm trong nhóm quá trình tương tự, SIGINT được gửi đến cả kịch bản khi Ctrl + C được nhấn trên dòng lệnh . Đó là lý do tại sao tôi không mong đợi script1.sh để tiếp tục khi script2.sh thoát.
Khi dòng "xử lý bẫy SIGINT" trong script2.sh được nhận xét, script1.sh không thoát ngay sau khi script2.sh tồn tại. Tôi muốn biết lý do tại sao nó hoạt động khác nhau sau đó, như script2.sh sản xuất chỉ là cùng một mã thoát (130) sau đó.
Có lẽ sử dụng 'set -e'? – phs