मुझे कुछ व्यवहार दिखाई दे रहा है जो मुझे समझ में नहीं आता है जब मैं -e
विकल्प के साथ एक बैश स्क्रिप्ट चलाता हूं जिसमें एकाधिक आदेश &&
एस के साथ मिलकर आते हैं और उनमें से एक विफल हो जाता है। मैं उम्मीद करता हूं कि स्क्रिप्ट विफल आदेश पर रुक जाए और बाहर निकलने की स्थिति लौटाए, लेकिन इसके बजाय यह बाकी स्क्रिप्ट को खुशी से निष्पादित करता है।शॉर्ट सर्किट कमांड के अनुक्रम में असफलताओं के लिए त्रुटि पर बैश क्यों नहीं रोकता है?
$ false && true; echo $?
1
$ bash -xe -c "false && true"; echo $?
+ false
1
$ bash -xe -c "false; true"; echo $?
+ false
1
और यहाँ है कि मेरे पास कोई मतलब नहीं है एक:
$ bash -xe -c "false && true; true"; echo $?
+ false
+ true
0
यह मैं कहाँ समझ में नहीं आता क्या है
यहाँ है कि मेरे पास कोई मतलब उदाहरण हैं चल रहा। false && true
रिटर्न स्थिति 1 इसलिए स्क्रिप्ट को निष्पादित करना बंद नहीं करना चाहिए और स्थिति 1 वापस करना चाहिए, जैसे स्क्रिप्ट false; true
है?
जबकि प्रयोग, मैंने पाया कि यह जिस तरह से मैं उम्मीद करेंगे काम करता है अगर मैं कोष्ठकों के साथ आदेशों की श्रृंखला के चारों ओर:
$ bash -xe -c "(false && true); true"; echo $?
+ false
1
किसी को भी इस के लिए एक स्पष्टीकरण दे सकते हैं?
जो वास्तव में बहुत समझ में आता है। मुझे पता था कि 'अगर' इस तरह से काम करता है लेकिन यह मेरे लिए कभी नहीं हुआ कि बैश 'वही' का इलाज करेगा। – histumness