Tôi muốn kích hoạt lệnh như "rm -rf /etc/XXX.pid
" khi tập lệnh shell bị gián đoạn ở giữa quá trình thực thi. Giống như sử dụng CTRL+C
Có ai có thể giúp tôi phải làm gì ở đây không?Làm thế nào để kích hoạt lệnh khi tập lệnh hệ vỏ bị gián đoạn?
5
A
Trả lời
7
Mặc dù nó có thể đến như một cú sốc đối với nhiều người, bạn có thể sử dụng bash
built-in trap
với các tín hiệu bẫy :-)
Vâng, ít nhất là những người có thể bị mắc kẹt, nhưng CTRL-C là thường được gắn với tín hiệu INT
. Bạn có thể bẫy các tín hiệu và thực thi mã tùy ý.
Tập lệnh sau sẽ yêu cầu bạn nhập một số văn bản sau đó gửi lại cho bạn. Nếu không chừng, bạn tạo ra một tín hiệu INT
, nó chỉ đơn giản gầm gừ vào bạn và lối thoát hiểm:
#!/bin/bash
exitfn() {
trap SIGINT # Restore signal handling for SIGINT
echo; echo 'Aarghh!!' # Growl at user,
exit # then exit script.
}
trap "exitfn" INT # Set up SIGINT trap to call function.
read -p "What? " # Ask user for input.
echo "You said: $REPLY"
trap SIGINT # Restore signal handling to previous before exit.
Một chạy thử nghiệm bảng điểm sau (một dòng vào đầy đủ, một phù hợp với cách nhấn tổ hợp phím CTRL-C trước khi bất kỳ mục, và phù hợp với nhập một phần trước khi nhấn CTRL-C):
pax> ./testprog.sh
What? hello there
You said: hello there
pax> ./testprog.sh
What? ^C
Aarghh!!
pax> ./qq.sh
What? incomplete line being entere... ^C
Aarghh!!
3
trap
được sử dụng để bắt tín hiệu trong tập lệnh, bao gồm SIGINT
được tạo khi nhấn Ctrl-C.
+1 Điều này tốt hơn nhiều, tôi chuẩn bị đề xuất toán tử logic cho chuỗi tập lệnh. – slezica