मैं "rm -rf /etc/XXX.pid
" जैसे कमांड को आग लगाना चाहता हूं जब शेल स्क्रिप्ट इसके निष्पादन के बीच में बाधित होती है। CTRL+C
का उपयोग करने की तरह कोई भी मेरी मदद कर सकता है कि यहां क्या करना है?शेल स्क्रिप्ट बाधित होने पर कमांड को कैसे फायर करें?
5
A
उत्तर
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 दबाया जाता है।
+1 यह बहुत बेहतर है, मैं चेन स्क्रिप्ट के लिए एक लॉजिकल ऑपरेटर का सुझाव देने वाला था। – slezica