से बाहर निकलने के बिना निकास फ़ंक्शन स्टैक मैं एक स्क्रिप्ट लिख रहा था और फिर एक अजीब समस्या में आया। अगर मैं ऐसी स्क्रिप्ट को स्रोत करता हूं जिसमें फ़ंक्शंस का एक समूह होता है जो एक त्रुटि फ़ंक्शन को कॉल कर सकता है जो स्ट्रिंग आउटपुट करता है और फिर बाहर निकलता है, तो यह मेरे खोल से बाहर निकल जाएगा। मुझे पता है कि यह क्यों करता है। ऐसा इसलिए है क्योंकि कॉलर के रूप में एक ही कार्य स्थान एक फ़ंक्शन कॉल होता है (कम से कम यह बैश में होता है), इसलिए फ़ंक्शन के भीतर निकास वर्तमान प्रक्रिया को प्रदान किए गए निकास कोड के साथ समाप्त कर देता है। उदाहरण:शैल
error()
{
echo $1
exit 1
}
fn()
{
if [ $# == 0 ]; then
error "Insufficient parameters."
fi
# do stuff
}
$ fn
Insufficient parameters.
[shell terminates]
तो मेरी सवाल है, मैं वर्तमान खोल समाप्त बिना और एक नया subshell को उत्पन्न करने के बिना समारोह ढेर में सभी कार्यों बाहर निकल सकते हैं?
धन्यवाद
निम्नलिखित "वापसी" बेहतर है ऐसा लगता है: यह इस उद्देश्य के लिए खोल में बनाई गई कार्यक्षमता है। खोल मारना सुरुचिपूर्ण है। – JPGConnolly
@JPGConnolly 'निम्नलिखित "वापसी से आपका क्या मतलब है" यह बेहतर लगता है'? यदि आप बिल्टिन 'रिटर्न' कथन का उपयोग करना चाहते हैं, तो आप इस सवाल को नहीं पढ़ रहे हैं क्योंकि इसका उपयोग करने का कोई आसान तरीका नहीं है कि यह एक फ़ंक्शन के भीतर से बेस खोल पर वापस कूद जाएगा जिसे कई अन्य कार्यों को गहराई से जोड़ा जाता है प्रत्येक फंक्शन कॉल के रिटर्न वैल्यू से पूछताछ करें, जो कुछ मामलों में व्यावहारिक या संभव नहीं है। 'Kill -INT $$ 'करना इस मामले में' वापसी 'का उपयोग करने से काफी अधिक सुरुचिपूर्ण है। – Adrian
$ का मूल्य क्या है? क्या स्रोत फ़ंक्शन का कॉलर देखता है? या यह भी इसे समाप्त करता है? – Michael