2013-06-03 4 views
24

मुझे sh में समानांतर में एकाधिक कमांड चलाने के लिए रास्ता खोजने का प्रयास किया गया है और इसे पूरा होने की प्रतीक्षा करें। मैंने पाया कि निम्न काम नहीं करता है (sh: 1: Syntax error: ";" unexpected):डैश डबल अर्धविराम (;;) वाक्यविन्यास

sh -c '(sleep 3 && echo 1) & ; (sleep 3 && echo 2) & ; wait' 

लेकिन इस वाक्य रचना काम करता है के रूप में उम्मीद:

sh -c '(sleep 3 && echo 1) & ;; (sleep 3 && echo 2) & ;; wait' 

लेकिन मुझे समझ नहीं आता अंतर नहीं है क्या। मेरा प्रश्न है ;; का अर्थ क्या है और इसका उपयोग कब किया जाना चाहिए?

+3

न तो कमांड लाइन यहां काम करती है। ';' 'केस 'कथन के लिए विकल्प विभाजक है। – Kent

+0

क्षमा करें, मैं गलत था, यह वास्तव में बैश में त्रुटि देता है, लेकिन डैश – valodzka

उत्तर

35

;; केवल एक विकल्प के अंत को इंगित करने के लिए case संरचनाओं में उपयोग किया जाता है। (जहां सी में break है यह मौजूद है)

case $answer in 
    yes) echo 'yay!';; 
    no) echo 'boo!';; 
esac 

वाक्य रचना, ; और & दोनों एक कमांड का अंत। पहली अनुमान में एक नई लाइन ; के बराबर है। उनके बीच का अंतर यह है कि ; या न्यूलाइन इंगित करता है कि आदेश अग्रभूमि में निष्पादित किया जाना चाहिए, जबकि & इंगित करता है कि आदेश पृष्ठभूमि में निष्पादित किया जाना चाहिए।

तो यहां आपको & wait की आवश्यकता है। & ; एक वाक्यविन्यास त्रुटि है (आपके पास खाली आदेश नहीं हो सकता है)। & ;; भी एक वाक्यविन्यास त्रुटि है; राख इसे जाने देता है (जैसे कि आपने केवल & लिखा होगा), लेकिन बाश शिकायत करता है। जाहिर है कि आपका शश कुछ राख संस्करण है (जैसे डैश, जो कई डेबियन डेरिवेटिव्स पर /bin/sh है)।

+1

महत्वपूर्ण बिट का उद्धरण: संवैधानिक रूप से, ';' और '& दोनों एक कमांड के अंत को चिह्नित करते हैं। तो यहां आपको 'प्रतीक्षा करें' की आवश्यकता है। –

5

इसका उपयोग मामलों के बीच case कथन में किया जाना चाहिए। आपके यहां जो मुद्दा है वह यह है कि & और ; कमांड सेपरेटर हैं, और आपको केवल उनमें से एक का उपयोग करना चाहिए।

+0

में काम करता है स्पष्टीकरण के लिए धन्यवाद, 'sh -c' (नींद 3 और echo 1) और (नींद 3 और echo 2) और प्रतीक्षा करें 'काम कर रहा है जैसा सोचा था। यह इस संदर्भ में हालांकि 'अर्थ' का अर्थ नहीं बताता है। – valodzka

+0

क्या आप वाकई 'sh' 'bash' है? –

+0

क्षमा करें, मैं गलत था, यह बाश नहीं है, यह [डैश] (http://gondor.apana.org.au/~herbert/dash/) – valodzka

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