मैं अपने लिपियों में इस तरह एक साधारण बैश प्रस्तावना का उपयोग कर के साथ बैश में -e/सेट + ई सेट का उपयोग:कार्यों
#!/bin/bash
set -e
प्रतिरूपकता के साथ संयोजन के रूप में/कार्य का उपयोग कर यह मेरे आज काट लिया है।
तो, कहते हैं कि मैं कहीं की तरह
foo() {
#edit: some error happens that make me want to exit the function and signal that to the caller
return 2
}
एक समारोह है आदर्श रूप में मैं कई छोटे फ़ाइलों का उपयोग करने में सक्षम होना चाहते हैं, अन्य फ़ाइलों में अपने कार्यों में शामिल हैं और फिर
set +e
foo
rc=$?
set -e
की तरह इन कार्यों फोन
। यह दिनचर्या की बिल्कुल दो परतों के लिए काम करता है। लेकिन अगर foo उस तरह subroutines को भी बुला रहा है, तो वापसी से पहले अंतिम सेटिंग set -e
होगी, जो रिटर्न पर स्क्रिप्ट से बाहर निकल जाएगी - मैं इसे कॉलिंग फ़ंक्शन में ओवरराइड नहीं कर सकता। तो, मुझे क्या करना पड़ा है
foo() {
#calling bar() in a shielded way like above
#..
set +e
return 2
}
कौन सा मुझे लगता है बहुत counterintuitive (और यह भी कि मैं क्या नहीं करना चाहता - क्या हुआ अगर कुछ संदर्भों में मैं, विफलताओं के खिलाफ परिरक्षण के बिना समारोह का उपयोग करने के, जबकि अन्य संदर्भों में करना चाहते हैं मैं सफाई को संभालना चाहता हूं?) इसे संभालने का सबसे अच्छा तरीका क्या है? Btw। मैं ओएसएक्स पर ऐसा कर रहा हूं, मैंने परीक्षण नहीं किया है कि यह व्यवहार लिनक्स पर अलग है या नहीं।
प्रतीक्षा करें, क्या आप विस्तार कर सकते हैं? क्या मैं इसे कॉलर में जोड़ूं? कोलन क्या करता है? –
क्या आप विस्तार कर सकते हैं कि मैं वापसी का दुरुपयोग कैसे कर रहा हूं? एक समारोह में त्रुटि को सिग्नल करने का मेरा मतलब कैसा है? (खेद है कि अगर मैं पर्याप्त स्पष्ट नहीं था - 'वापसी 2' केवल एक त्रुटि स्थिति में किया जाता है। –
आप नहीं हैं, लेकिन मैंने सोचा था कि आप थे। मेरा बुरा, क्षमा करें। – Carpetsmoker