2017-01-12 7 views
5

मेरे स्क्रिप्ट पहले निर्देश के रूप में है:बैश: कैसे जाल को -e सेट है, लेकिन नहीं से बाहर निकलने के

set -e 

तो जब भी कोई त्रुटि होती है, तो स्क्रिप्ट रोकता है। मैं एक सूचना संदेश दिखाने के लिए इस स्थिति को फंसाना चाहता हूं, लेकिन जब भी स्क्रिप्ट निकलती है तो मैं उस संदेश को नहीं दिखाना चाहता; केवल जब सेट-गर्भपात ट्रिगर करता है। क्या इस स्थिति को फँसाना संभव है?

यह:

set -e 

function mytrap { 
    echo "Abnormal termination!" 
} 

trap mytrap EXIT 

error 

echo "Normal termination" 

किसी भी निकास में कहा जाता है (एक त्रुटि होता है या नहीं) है, जो नहीं है कि मैं क्या चाहता हूँ।

trap mytrap ERR 

पूर्ण कोड::

set -e 

function mytrap { 
    echo "Abnormal termination!" 
} 

trap mytrap ERR 

(($#)) && error 

echo "Normal termination" 

अब त्रुटि पीढ़ी के लिए इसे चलाने:

bash sete.sh 123 
sete.sh: line 9: error: command not found 
Abnormal termination! 

+0

सामान्य निकास बिंदुओं पर एक फ़ंक्शन को कॉल करें जैसे कि यह सामान्य समाप्ति को इंगित करने के लिए ध्वज सेट करता है। सामान्य और असामान्य समाप्ति के बीच अंतर करने के लिए इस मूल्य को आपके जाल समारोह द्वारा चेक किया जा सकता है। – codeforester

+0

@codeforester Yepp, अब मैं उन शर्तों पर सोच रहा था। – dangonfast

उत्तर

5

इसके बजाय EXIT पर trap का उपयोग कर के, ERR घटना पर इसका इस्तेमाल और यहाँ सामान्य निकास है:

bash sete.sh 
Normal termination 
+2

हालांकि थोड़ा बोझिल मुझे "ईआरआर" जाल से अवगत नहीं था। अच्छी तरह से समझाया, @anubhava! – codeforester

+1

धन्यवाद अनुभू। पहली बार मैं नहीं देखता कि आप कितने फायदेमंद हैं। क्या आपके पास उन्नत बैश प्रोग्रामिंग पर कोई सुझाव है? लिंक या किताबों का स्वागत है! – dangonfast

+0

और '(($ #)) और त्रुटि का क्या मतलब है? :) – dangonfast

संबंधित मुद्दे