2014-12-02 3 views
6

में सेट नहीं हैं। मैंने जो भी सिस्टम पहले उपयोग किया है, वह मेरी सरल बैश स्क्रिप्ट जारी रखता है यदि एक पंक्ति गैर-शून्य परिणाम देता है। कुछ नई उबंटू एलटीएस 14.x सिस्टम अब पहली विफलता से बाहर निकलते हैं। मैंनेबैश स्क्रिप्ट 1 गैर-शून्य परिणाम के बाद बाहर निकल रही है, भले ही हम ENV

echo $- 

और ई सूची में प्रकट नहीं होता है। मुझे और क्या देखना चाहिए?

टिप्पणी से जोड़ा गया:

$ declare -f command_not_found_handle 
command_not_found_handle() 
{ 
    if [ -x /usr/lib/command-not-found ]; then 
     /usr/lib/command-not-found -- "$1"; 
     return $?; 
    else 
     if [ -x /usr/share/command-not-found/command-not-found ]; then 
      /usr/share/command-not-found/command-not-found -- "$1"; 
      return $?; 
     else 
      printf "%s: command not found\n" "$1" 1>&2; 
      return 127; 
     fi; 
    fi 
} 
+1

क्या 'declare -f command_not_found_handle' आउटपुट कुछ भी घोषित करता है? –

+0

हां, परिणाम अपेक्षित है मुझे लगता है कि 'command_not_found_handle() { यदि [-x/usr/lib/command-not-found]; फिर /usr/lib/कमांड-नहीं मिला - "$ 1"; $ वापसी ?; अन्य यदि [-x/usr/share/command-not-found/command-not-found]; फिर /usr/share/command-not-found/कमांड-नहीं मिला - "$ 1"; $ वापसी ?; अन्य printf "% s: कमांड नहीं मिला \ n" "$ 1" 1> और 2; वापसी 127; फाई; fi } ' –

+1

इसलिए यदि आप किसी भी कमांड का उपयोग करने का प्रयास करते हैं तो आपकी स्क्रिप्ट बाहर निकल जाएगी, जहां उन स्क्रिप्ट्स में से कोई भी शून्य शून्य नहीं लौटाता है या जब इनमें से कोई भी स्क्रिप्ट नहीं मिलती है। आपकी लिपि से बाहर निकलने वाला क्या निकास कोड है? स्क्रिप्ट में किस बिंदु पर? 'Set -x' आपको क्या दिखाता है? –

उत्तर

1

अपनी स्क्रिप्ट में एक पार्टी जाल का प्रयोग करें, एक bash स्क्रिप्ट के नीचे उदाहरण देखें:

#!/usr/bin/bash 

main() { 
    trap 'error_handler ${LINENO} $?' ERR 
    ###### put your commands in the following 
    echo "START" 

    non_existent_command 

    echo "END" 
} 

error_handler() { 
    process="$0" 
    lastline="$1" 
    lasterr="$2" 
    printf 'ERROR: %s: line %s: last command exit status: %s \n' "$process" "$lastline" "$lasterr" 
    trap - ERR 
    exit 0 
} 

main 

यदि आप एक गैर विद्यमान आदेश शुरू करने की कोशिश (उदाहरण में non_existent_command) या 0 से अलग निकास स्थिति वाले कमांड error_handler फ़ंक्शन को सक्रिय करेगा जिसमें निकास कमांड exit 0 शामिल है। उत्पादन ऊपर नमूने में हो जाएगा:

>START 
>./new.sh: line 8: non_existent_command: command not found 
>ERROR: ./new.sh: line 8: last command exit status: 127 

ध्यान दें कि "स्टार्ट" छपा है लेकिन "समाप्त" नहीं।

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