bash - बैश स्क्रिप्ट में एग्जिट कोड को कैसे फंसाएं




signals exit-code (2)

मेरे बैश कोड में कई निकास बिंदु हैं। मुझे बाहर निकलने पर कुछ सफाई का काम करने की आवश्यकता है, इसलिए मैंने इस तरह से बाहर निकलने के लिए कॉलबैक जोड़ने के लिए जाल का उपयोग किया:

trap "mycleanup" EXIT

समस्या यह है कि अलग-अलग निकास कोड हैं, मुझे संबंधित सफाई कार्य करने की आवश्यकता है। क्या मुझे माइक्लीनअप में एक्जिट कोड मिल सकता है?


मुझे लगता है कि आप $? उपयोग कर सकते हैं $? निकास कोड प्राप्त करने के लिए।


मैंने पाया है कि अन्य संकेतों के लिए EXIT जाल को जाल से अलग करना बेहतर है

उदाहरण जाल परीक्षण स्क्रिप्ट ...

umask 77
tmpfile=`tmpfile.$$`
trap 'rm -f "$tmpfile"' EXIT
trap 'exit 2' HUP INT QUIT TERM

touch $tmpfile
read -r input 

exit 10

अस्थायी फ़ाइल को साफ किया जाता है। 10 का फ़ाइल निकास मान संरक्षित है! व्यवधान के परिणामस्वरूप 2 का निकास मान प्राप्त होता है

मूल रूप से जब तक आप किसी EXIT जाल में "बाहर निकलें" का उपयोग नहीं करते हैं, यह मूल निकास मूल्य संरक्षित रहेगा।

ASIDE: EXIT ट्रैप में कोटिंग पर ध्यान दें। इससे मुझे पता चलता है कि स्क्रिप्ट के जीवनकाल में किस फ़ाइल को साफ़ करने की आवश्यकता है। मैं अक्सर $ tmpfile चर अस्तित्व के लिए एक परीक्षण भी शामिल करता हूं, इसलिए मुझे इसे स्क्रिप्ट की शुरुआत में सेट करने की आवश्यकता नहीं है।







bash-trap