समानांतर में कमांड चलाएं और अगले शुरू करने से पहले कमांड के एक समूह का इंतजार करें


12

मेरे पास कई कमांड सहित स्क्रिप्ट है। मैं एक साथ चलाने के लिए कैसे आदेश दे सकता हूं (मैं कमांड के कई समूह बनाना चाहता हूं। प्रत्येक समूह के भीतर, कमांड को समानांतर में (एक ही समय में) चलना चाहिए। समूहों को क्रमिक रूप से चलना चाहिए, एक समूह के शुरू होने से पहले खत्म होने का इंतजार करना चाहिए। अगला समूह) ... अर्थात

#!/bin/bash
command #1
command #2
command #3
command #4
command #5
command #6
command #7
command #8
command #9
command #10

मैं पाने के लिए हर 3 कमांड कैसे चला सकता हूं? मैंने कोशिश की:

#!/bin/bash
{
command #1
command #2
command #3
} & 
{   
command #4
command #5
command #6
} & 
{
command #7
command #8
command #9
}&
command #10

लेकिन यह ठीक से काम नहीं कर रहा था (मैं एक ही समय में समानांतर में कमांड के समूह को चलाना चाहता हूं। इसके अलावा मुझे अगले समूह को चलाने से पहले पहले समूह के समाप्त होने की प्रतीक्षा करनी होगी)

स्क्रिप्ट एक त्रुटि संदेश के साथ बाहर निकल रही है!


2
आपका क्या मतलब है, एक साथ दौड़ें क्या आपका मतलब है एक ही समय में समानांतर चलना? आप इसे कैसे जानते हैं "ठीक से काम नहीं किया?" जब यह ठीक से काम करेगा तो आपको कैसे पता चलेगा? क्या आप अगले समूह को चलाने से पहले पहले समूह के समाप्त होने की प्रतीक्षा करना चाहते हैं?
राबर्टएल

@ रॉबर्टएल.हाँ मैं एक ही समय में समानांतर में मतलब है। स्क्रिप्ट एक त्रुटि संदेश के साथ बाहर निकल रही है। हां, मुझे अगले समूह को चलाने से पहले समाप्त होने वाले समूह का इंतजार करने की जरूरत है।

1
@goro आपको उद्धृत करते हुए, स्क्रिप्ट एक त्रुटि संदेश के साथ बाहर निकल रही है। कृपया इस तरह के संदेश को जोड़ने के लिए अपने सवाल को संपादित करें (पूरा होने के लिए) और चिट-चैट (सराहना की गई सलाह) को हटा दें।
dave_alcarin 11

क्या यह प्रत्येक उदाहरण में एक ही कमांड चल रहा है? एक ही नाम?
राबर्टएल

1
@goro, क्या यह सही है? "आपके पास आदेशों के कई समूह हैं। प्रत्येक समूह के भीतर, कमांड समानांतर (एक ही समय में) में चलना चाहिए। समूहों को क्रमिक रूप से चलना चाहिए, अगले समूह को शुरू करने से पहले एक समूह के समाप्त होने का इंतजार करना चाहिए।"
राबर्टएल

जवाबों:


20

प्रत्येक समूह के भीतर के कमांड समानांतर में चलते हैं, और समूह क्रमिक रूप से चलते हैं, समानांतर कमांड के प्रत्येक समूह पिछले समूह के निष्पादन से पहले समाप्त होने की प्रतीक्षा कर रहे हैं।

निम्नलिखित एक कार्य उदाहरण है:

नीचे दिए गए कोड के अनुसार आदेशों के 3 समूहों को मान लें। प्रत्येक समूह में पृष्ठभूमि के साथ तीन कमांड शुरू होते हैं &

3 कमांड लगभग एक ही समय में शुरू की जाएंगी और समानांतर में चलेंगी, जबकि waitsउनके लिए स्क्रिप्ट खत्म हो जाएगी।

तीसरे समूह से बाहर निकलने के तीनों आदेशों के बाद, command 10निष्पादन होगा।

$ cat command_groups.sh 
#!/bin/sh

command() {
    echo $1 start
    sleep $(( $1 & 03 ))      # keep the seconds value within 0-3
    echo $1 complete
}

echo First Group:
command 1 &
command 2 &
command 3 &
wait

echo Second Group:
command 4 &
command 5 &
command 6 &
wait

echo Third Group:
command 7 &
command 8 &
command 9 &
wait

echo Not really a group, no need for background/wait:
command 10

$ sh command_groups.sh 
First Group:
1 start
2 start
3 start
1 complete
2 complete
3 complete
Second Group:
4 start
5 start
6 start
4 complete
5 complete
6 complete
Third Group:
7 start
8 start
9 start
8 complete
9 complete
7 complete
Not really a group, no need for background/wait:
10 start
10 complete
$   

मुझे लगता है कि आपके उदाहरण में पर्दे पूरी तरह से व्यर्थ हैं। प्रतीक्षा प्रक्रिया-वैश्विक है, और इस समूह में घटता समूह नया कांटा नहीं बनाएगा।
PSkocik

1
@ पीस्कोकिक, सच। वृषण अंगों।
रॉबर्ट एनएल

6
{
command #1
command #2
command #3
} & 
{   
command #4
command #5
command #6
} & 
{
command #7
command #8
command #9
}&
command #10
wait #<===

काम करना चाहिए (प्रत्येक व्यक्तिगत ट्रिपल घटक क्रमिक रूप से चलेगा, लेकिन हेट समूह समानांतर में चलेंगे)। आप शायद अपने माता-पिता के खोल को समूहों के समाप्त होने से पहले बाहर नहीं निकलना चाहते - इसलिए wait


2
मूल प्रश्न में कहा गया है "प्रत्येक 3 कमांड को एक साथ चलाएं"। स्पष्टीकरण के बिना, या तो उत्तर सही है। पर अच्छी कॉल wait
राबर्टएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.