2014-11-06 6 views
5
[email protected]:~$ test -x examples.desktop && echo $? 
[email protected]:~$ test -x examples.desktop & echo $? 
[1] 2992 
0 

इस स्थिति में जिस तरह से काम कर रहा है, इस तरह से कार्य क्यों कर रहा है? क्या परीक्षण कमांड बस खत्म नहीं होता है और इस प्रकार गूंज कमांड संसाधित नहीं होता है?&& बनाम और टेस्ट कमांड के साथ बैश

+1

निष्पादित करें आपके द्वारा अपेक्षित व्यवहार की व्याख्या न करें। इसके बारे में क्या आश्चर्यजनक है? यह आश्चर्यजनक क्यों है? यह किस उम्मीद के खिलाफ है? –

उत्तर

6

&& और & का अर्थ आंतरिक रूप से भिन्न है।

  • bash में && क्या है?bash में और कई अन्य प्रोग्रामिंग भाषाओं- && का अर्थ है "और"। और इस तरह कमांड निष्पादन संदर्भ में, इसका अर्थ यह है कि इस मामले में बाईं ओर के आइटम के साथ-साथ && के दाएं क्रम में चलाना चाहिए।
  • bash में & क्या है? और एक & का अर्थ है कि पिछले आदेश- & के तत्काल बाईं ओर-बस पृष्ठभूमि में चलाया जा सकता है।

तो अपने उदाहरण को देख:

[email protected]:~$ test -x examples.desktop && echo $? 
[email protected]:~$ test -x examples.desktop & echo $? 
[1] 2992 
0 

पहले कमांड के रूप में यह संरचित-वास्तव में है कुछ भी वापस नहीं करता है। लेकिन दूसरा कमांड [1] 2992 देता है जिसमें 2992 पृष्ठभूमि में चल रहे प्रक्रिया आईडी (पीआईडी) को संदर्भित करता है और 0 पहले कमांड का आउटपुट होता है।

चूंकि दूसरा आदेश पृष्ठभूमि में test -x examples.desktop चला रहा है, यह बहुत तेज़ी से होता है इसलिए प्रक्रिया आईडी उत्पन्न होती है और तुरंत चली जाती है।

2

& पृष्ठभूमि में एक आदेश निष्पादित करता है, और इसकी स्थिति के बावजूद 0 वापस आ जाएगा।

the man page से:

एक कमांड नियंत्रण ऑपरेटर & द्वारा समाप्त होने पर, खोल एक subshell में पृष्ठभूमि में आदेश निष्पादित करता है। खोल कमांड को समाप्त करने की प्रतीक्षा नहीं करता है, और वापसी की स्थिति 0 है। द्वारा अलग किए गए कमांड; अनुक्रमिक रूप से निष्पादित कर रहे हैं; खोल प्रत्येक आदेश के बदले में समाप्त होने की प्रतीक्षा करता है। वापसी की स्थिति निष्पादित अंतिम आदेश की निकास स्थिति है। क्या अपने आदेश हैं पर

2

देखो:

$ test -x examples.desktop && echo $? 

यह चेक अर्थ है कि यदि examples.desktop निष्पादन योग्य है देखने के लिए और उसके बाद निष्पादित अगर यह होता है echo $?

$ test -x examples.desktop & echo $? 

साधन अगर examples.desktop है देखने के लिए जाँच निष्पादन योग्य और "पृष्ठभूमि" में चलाएं, फिर echo $?

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