लूप के लिए कैसे लिखें जो प्रत्येक पुनरावृत्ति में एक अतुल्यकालिक कमांड चलाता है?


23

मुझे आश्चर्य है कि लूप के भीतर एक अतुल्यकालिक कमांड का उपयोग करने में त्रुटि क्यों है?

$ for i in {1..8}; do sleep 100 & ; done
bash: syntax error near unexpected token `;'

अगर मैं इसे लिखता हूं

$ for i in {1..8}; do 
> sleep 100 & 
> done

यह ठीक काम करता है।

बिना त्रुटि के मैं इसे एक पंक्ति में कैसे लिख सकता हूं?

जवाबों:


39

ड्रॉप ;:

for i in {1..8}; do sleep 100 & done

&आदेशों को अलग करता है , इसलिए ;बहिर्मुखी है (और शेल को कुछ &और के बीच की उम्मीद है ;)।


धन्यवाद। "शेल को उम्मीद है कि & के बीच कुछ होगा?", इसलिए & के बीच एक खाली कमांड ओके क्यों नहीं है?
टिम

5
असली नो-ऑप कमांड है:
HTNW

1
@StephenKitt, आपके द्वारा संदर्भित अनुभाग में यह भी कहा गया है: "एक इंटरैक्टिव सत्र या अन्य कमांड के साथ एक स्क्रिप्ट में, अतिरिक्त <newline> या <semicolon> वर्ण ... यहाँ वर्णित खाली कमांड के रूप में योग्य नहीं होंगे क्योंकि वे अन्य के साथ सेवन किए जाएंगे" व्याकरण के कुछ भाग। " हम्मम ...
वाइल्डकार्ड

1
@Wildcard दिलचस्प है, टिम के फॉलो-अप के जवाब पर शोध करते समय मैंने उस वाक्य के परिणामों के बारे में नहीं सोचा था। बैश के पोसिक्स मोड को सक्षम करने से इस संबंध में अपना व्यवहार नहीं बदलता है। हम्म्म वास्तव में ...
स्टीफन किट

2
@Wildcard: echo foo ; ; echo barबैश में 4.4 कहता है syntax error near unexpected token `;'dashएक समान त्रुटि देता है। इस मामले में, यह एक खाली कमांड है क्योंकि व्याकरण का कोई अन्य हिस्सा इसका सेवन नहीं करता है। मुझे लगता है कि वे (newline) की ;तरह एक पंक्ति के अंत में अनावश्यक के बारे में बात कर सकते हैं sleep 100;
पीटर कॉर्ड्स

22

अपने doकार्यों को घुंघराले कोष्ठक में समूहित करें :

for i in {1..8}; do { sleep 100 & }; done

आप के लिए और साथ ही बैश के लिए समझने में आसान!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.