मान लीजिए कि एक खोल स्क्रिप्ट (/ bin/sh या/bin/bash) में कई कमांड हैं। अगर किसी भी कमांड में असफल निकास की स्थिति है तो मैं स्क्रिप्ट को साफ़ कर सकता हूं? जाहिर है, अगर कोई ब्लॉक और/या कॉलबैक का उपयोग कर सकता है, लेकिन क्या एक क्लीनर, अधिक संक्षिप्त तरीका है? & & का उपयोग करना वास्तव में एक विकल्प नहीं है, क्योंकि आदेश लंबे समय तक हो सकते हैं, या लिपि में लूप और सशर्त जैसे गैर-छोटी चीजें हो सकती हैं।शैल स्क्रिप्टिंग: किसी भी त्रुटि पर मरें
उत्तर
sh
और
bash
साथ
, आप कर सकते हैं
set -e
यह होगा
$ help set
...
-e Exit immediately if a command exits with a non-zero status.
यह भी zsh
साथ (मैं क्या इकट्ठा कर सकता से) काम करता है। यह किसी भी बोर्न शैल वंश के लिए भी काम करना चाहिए।
csh
/
tcsh
साथ
, आप #!/bin/csh -e
साथ अपनी स्क्रिप्ट शुरू करने के लिए आप इस्तेमाल कर सकते हैं हो सकता है है:
$ <any_command> || exit 1
यह पैटर्न ** व्यक्तिगत आदेशों की विफलता पर चुनिंदा रूप से बाहर निकलने के लिए उपयोगी है ** और ** ** यदि आप कस्टम त्रुटि संदेश ** पहले प्रिंट करना चाहते हैं। उत्तरार्द्ध करने के लिए, '
लाइव और जानें: बैश में कमांड-ग्रुपिंग सुविधा है, इसलिए मैंने उल्लेख की गई 'eval' चाल की आवश्यकता नहीं है। इसके बजाय, '
आप $ देख सकते हैं? क्या सबसे हाल ही में बाहर निकलने के कोड है देखने के लिए ..
, उदा,
#!/bin/sh
# A Tidier approach
check_errs()
{
# Function. Parameter 1 is the return code
# Para. 2 is text to display on failure.
if [ "${1}" -ne "0" ]; then
echo "ERROR # ${1} : ${2}"
# as a bonus, make our script exit with the right error code.
exit ${1}
fi
}
### main script starts here ###
grep "^${1}:" /etc/passwd > /dev/null 2>&1
check_errs $? "User ${1} not found in /etc/passwd"
USERNAME=`grep "^${1}:" /etc/passwd|cut -d":" -f1`
check_errs $? "Cut returned an error"
echo "USERNAME: $USERNAME"
check_errs $? "echo returned an error - very strange!"
-1: यह एक बहुत ही लगातार एंटीपाटर है। @ बरुन का समाधान सरल और अधिक मूर्खतापूर्ण है। – tripleee
उपरोक्त के समान स्क्रिप्ट, लेकिन एक "टियरियर दृष्टिकोण" (सभी एक पंक्ति पर) के रूप में: foo = $ (grep "^ $ {1}"/etc/passwd) && foo = $ (echo "$ foo" | कट -d: -f1) && echo ok || echo not_ok (एनबी: यदि बैश का उपयोग करना है, और sh तक सीमित नहीं है, तो कोई पाइपलाइन के किसी भी हिस्से की निकास स्थिति प्राप्त कर सकता है, जो grep/cut logic को सरल बनाता है।) – michael
बस सेट -e – Codefor
- 1. शैल स्क्रिप्टिंग
- 2. शैल स्क्रिप्टिंग
- 3. शैल स्क्रिप्टिंग
- 4. शैल स्क्रिप्टिंग: xargs
- 5. शैल स्क्रिप्टिंग इनपुट पुनर्निर्देशन विषमता
- 6. किसी भी कमांड पर एनपीएम त्रुटि
- 7. किसी को भी किसी भी स्थिर टाइप की गई स्क्रिप्टिंग भाषाओं के बारे में पता है?
- 8. यूनिक्स शैल स्क्रिप्टिंग में चर में मान कैसे जोड़ें?
- 9. शैल स्क्रिप्ट स्टॉप त्रुटि
- 10. गिट त्रुटि: src refspec मास्टर किसी भी
- 11. बैश शैल स्क्रिप्टिंग: मुझे क्या आसान तर्क है
- 12. मैं शैल स्क्रिप्टिंग के लिए रूबी का उपयोग कैसे करूं?
- 13. शैल स्क्रिप्ट्स में टेस्ट कुछ भी प्रोटोकॉल
- 14. किसी छवि से क्रॉस-साइट स्क्रिप्टिंग
- 15. वीआईएम स्क्रिप्टिंग पर अच्छी मार्गदर्शिका?
- 16. लिनक्स खोल स्क्रिप्टिंग
- 17. किसी भी
- 18. शैल
- 19. शैल स्क्रिप्ट कॉल और लापता विभाजक त्रुटि
- 20. किसी भी()
- 21. खोल स्क्रिप्टिंग में अपवाद हैंडलिंग?
- 22. किसी भी लेनदेन
- 23. शैल स्क्रिप्ट वैश्विक कैसे बनाएं?
- 24. किसी भी Django एप्लिकेशन
- 25. 500 अपाचे लॉग में किसी भी चीज़ के बिना त्रुटि
- 26. बैच स्क्रिप्टिंग
- 27. स्क्रिप्टिंग एसवीजी
- 28. शैल
- 29. शैल
- 30. शैल स्क्रिप्ट, संदेश
धन्यवाद, यह मैं क्या चाहते हो रहा है। मुझे अपने Google fu को तेज करना चाहिए, मुझे लगता है ... :) – Pistos
ध्यान दें कि सशर्त में आदेश स्क्रिप्ट को बाहर निकलने के बिना विफल हो सकते हैं - जो महत्वपूर्ण है। उदाहरण के लिए: यदि grep कुछ/कुछ/कहाँ; तब: यह पाया गया था; अन्यथा: यह नहीं मिला था; फाई ठीक काम करता है, इस पर ध्यान दिए बिना कि कुछ/कुछ/कहां पाया जाता है। –
आप "मानक sh" कहते हैं। क्या इसका मतलब यह है कि यह पॉज़िक्स है? संपादित करें: मैंने इसे देखा है और यह POSIX है: http://pubs.opengroup.org/onlinepubs/009695399/utilities/set.html – Taywee