2015-07-03 9 views
11

मैं एक त्रुटि जाल के रूप में निम्नानुसार है के बाद untrap कैसे करें:एक जाल आदेश

command1 
command2 
command3 
set +e #deactivates error capture 
command4_which_expects_error 
set -e #re-activates error capture 
command5 

कुल मिलाकर मैं की जरूरत है:

trap failed ERR 
function failed { 
    local r=$? 
    set +o errtrace 
    set +o xtrace 
    echo "###############################################" 
    echo "ERROR: Failed to execute" 
    echo "###############################################" 
    # invokes cleanup 
    cleanup 
    exit $r 
} 

मेरे कोड का एक हिस्सा है जहां मैं एक त्रुटि उम्मीद करना भी नहीं है command4_which_expects_error के निष्पादन के दौरान जाल उपेक्षा

सेट + ई निष्क्रिय करने के लिए प्रतीत नहीं होता जाल। "Untrap" और फिर "फिर से जाल" करने के लिए कोई अन्य तरीका?

उत्तर

18

यहाँ तुम क्या जाल के मैनुअल में मिल सकती है , लेकिन एक ही परिस्थितियों में निष्पादित किया जाता है। set -e को ईआरआर पर जाल में जोड़ने से जाल को निष्पादित करने के बाद आपकी स्क्रिप्ट बाहर निकल जाएगी।

एक जाल है, उपयोग निकालने के लिए:

trap - [signal] 
1

आप trap पुनर्स्थापित करने के लिए पहले सेट इस trap उपयोग कर सकते हैं:

The KornShell uses an ERR trap that is triggered whenever set -e would cause an exit.

इसका मतलब है कि यह set -e से शुरू हो रहा है:

trap '' ERR 
+2

'मदद trap' उपयोग' '' 'अनदेखी करने के लिए,' -' को व्यवहार डिफ़ॉल्ट पर रीसेट कहते हैं। –

0

एक आदेश है कि आप जानते हैं कि असफल हो जायेगी की विफलता की अनदेखी करने के लिए आपको लाइन हमेशा || true जोड़कर सफल होने के लिए हो सकता है।

उदाहरण:

#!/bin/bash 

set -e 

failed() { 
    echo "Trapped Failure" 
} 
trap failed ERR 

echo "Beginning experiment" 
false || true 
echo "Proceeding to Normal Exit" 

परिणाम

Beginning experiment 
Proceeding to Normal Exit 
संबंधित मुद्दे