2013-02-05 51 views
5

मैं "rm -rf /etc/XXX.pid" जैसे कमांड को आग लगाना चाहता हूं जब शेल स्क्रिप्ट इसके निष्पादन के बीच में बाधित होती है। CTRL+C का उपयोग करने की तरह कोई भी मेरी मदद कर सकता है कि यहां क्या करना है?शेल स्क्रिप्ट बाधित होने पर कमांड को कैसे फायर करें?

उत्तर

7

हालांकि यह कई के लिए एक आघात के रूप में आ सकता है, तो आप उपयोग कर सकते हैं bash निर्मित trap जाल संकेतों को :-)

ठीक है, कम से कम उन है कि फंस जा सकता है लेकिन CTRL-C है आमतौर पर INT संकेत से जुड़ा हुआ है। आप संकेतों को जाल कर सकते हैं और मनमानी कोड निष्पादित कर सकते हैं।

निम्न स्क्रिप्ट आपको कुछ टेक्स्ट दर्ज करने के लिए कहेंगे तो उसे वापस दोहराएं। तो हो सकता है, आप एक INT संकेत उत्पन्न, यह बस पर कराहना आप और बाहर निकलता है:

#!/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. 

एक परीक्षण रन प्रतिलेख (एक पूरी तरह से प्रवेश किया लाइन, किसी भी प्रवेश करने से पहले CTRL-C दबाने के साथ एक पंक्ति है, और के साथ एक पंक्ति इस प्रकार है 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 स्क्रिप्ट में संकेतों को पकड़ने के लिए उपयोग किया जाता है, जिसमें SIGINT उत्पन्न होता है जब Ctrl-C दबाया जाता है।

+0

+1 यह बहुत बेहतर है, मैं चेन स्क्रिप्ट के लिए एक लॉजिकल ऑपरेटर का सुझाव देने वाला था। – slezica