2012-02-13 11 views
12

मैं bash खोल में समानांतर में 3 आदेशों को चलाने के लिए कोशिश कर रहा हूँ:बैश और (एम्परसेंड) ऑपरेटर

$ (first command) & (second command) & (third command) & wait 

इस के साथ समस्या यह है कि अगर first command में विफल रहता है, उदाहरण के लिए, बाहर निकलें कोड 0 है (मैं अनुमान है क्योंकि wait सफल होता है)।

वांछित व्यवहार यह है कि यदि आदेशों में से कोई एक विफल रहता है, तो निकास कोड शून्य-शून्य होगा (और आदर्श रूप से, अन्य चल रहे आदेश रोक दिए जाएंगे)।

मैं इसे कैसे प्राप्त कर सकता हूं?

कृपया ध्यान दें कि मैं समानांतर में आदेशों को चलाने के लिए चाहता हूं!

उत्तर

4
सबसे अच्छा मैं के बारे में सोच सकते हैं

है:

first & p1=$! 
second & p2=$! 
... 

wait $p1 && wait $p2 && .. 

या

wait $p1 || (kill $p2 $p3 && exit 1) 
... 

हालांकि यह अभी भी प्रक्रियाओं की जांच करने के लिए एक आदेश को लागू करता है, इसलिए यदि तीसरे विफल रहता तुरंत तुम नोटिस नहीं होगा यह पहली और दूसरी खत्म होने तक।

4

आपको & के बजाय && का उपयोग करना चाहिए। उदाहरण के लिए:

first command && second command && third command && wait 

हालांकि इस नहीं समानांतर में अपने आदेश चला के रूप में बाद के हर आदेश को फांसी पिछला आदेश के निकास कोड 0 पर निर्भर करेगा होगा।

+3

मुझे लगता है कि रिटर्न कोड के मामले में काम करेगा, लेकिन समानांतर में कमांड निष्पादित नहीं करेगा। – jcollado

+0

सहमत हुए और मेरे जवाब में भी एक नोट बनाया। हालांकि अगर कम समानांतर में चल रहे हैं तो आप बाहर निकलने के कोड की जांच नहीं कर सकते हैं क्योंकि पिछला कमांड दूसरे स्थान पर नहीं निकलता है। – anubhava

+1

यहां मुख्य बाधा समानांतर ** में कमांड ** चलाने के लिए है। मुझे इस एक-लाइनर को अधिक जटिल बैश स्क्रिप्ट के साथ प्रतिस्थापित करने की कोई बात नहीं है जब तक कि कमांड समानांतर में चलें और विफलताओं के मामले में निकास कोड शून्य-शून्य होगा। –

2

यह आप के लिए काम कर सकते हैं:

parallel -j3 --halt 2 <list_of_commands.txt 

यह समानांतर में 3 आदेशों चलेंगे।

यदि कोई रनिंग जॉब विफल रहता है तो यह शेष चल रही नौकरियों को मार देगा और फिर असफल नौकरी के निकास कोड को वापस कर देगा।

+0

क्या आप 'समांतर' दस्तावेज़ों के लिए सूचक प्रदान कर सकते हैं? –

+0

यह समानांतर में 3 कमांड चलाएगा लेकिन ओपी की निकास कोड आवश्यकता को पूरा नहीं करेगा। – anubhava

+0

@ मिशामोरोशको google gnu समानांतर। समानांतर मैनुअल से @anubhava '--halt 2 तुरंत सभी नौकरियों को मार दें और सफाई के बिना बाहर निकलें। बाहर निकलने की स्थिति असफल स्थिति से बाहर निकलने की स्थिति होगी – potong

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