2013-02-05 26 views

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.

+0

+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