एकल कमांड के साथ पृष्ठभूमि में कई प्रोग्राम कैसे चला सकते हैं?


36

एकल कमांड के साथ पृष्ठभूमि में कई प्रोग्राम कैसे चला सकते हैं?

मैंने नीचे दिए गए आदेशों की कोशिश की है, लेकिन वे काम नहीं करते हैं।

nohup ./script1.sh & && nohup ./script2.sh &
-bash: syntax error near unexpected token '&&'

nohup ./script1.sh & ; nohup ./script2.sh &
-bash: syntax error near unexpected token ';'

एक एकल "कमांड" क्या है? बैश की एक पंक्ति?
ओलूफ़ लोरेंज़ेन


मुझे कुछ स्पष्ट याद आ रहा है, लेकिन && का तात्पर्य पिछले कमांड के एक्जिट कोड को जानने से है। यदि आप इसे पृष्ठभूमि में रखते हैं, तो निकास कोड ज्ञात नहीं होगा। वहाँ कार्यात्मक आवश्यकता क्या थी?
रिचलेव

जवाबों:


32

एक शेल सिंटैक्स दृष्टिकोण से, / / ... (हालांकि अलग-अलग अर्थ के साथ) &जैसे आदेशों को अलग करता है। तो यह सिर्फ:;|&&

cmd1 & cmd2 & cmd3 &

1
यह / काफी / सही नहीं है, ;जैसे ही पहला कमांड समाप्त हुआ, अगले कमांड को शुरू करता है। &वास्तव में पृष्ठभूमि पर कमांड डालता है। बस इसे आज़माएँ:echo foo & echo bar & echo test &
ओलुफ़ लोरेनज़ेन

1
@ फ़िन्च्रेग, बिल्कुल। किसी को शक नहीं है। मेरा मतलब है कि वे दोनों अलग-अलग आदेशों (एक वाक्यविन्यास बिंदु से) के साथ कोई निहितार्थ नहीं हैं कि उन्हें कैसे चलाया जाता है।
स्टीफन चेजलस

यह बिल्कुल नहीं पूछा गया है, क्योंकि प्रश्न "एकल आदेश" जारी करने के लिए निर्दिष्ट है। न तो मेरा जवाब है, क्योंकि यह भी आदेशों की एक श्रृंखला है, लेकिन इसमें एक ही कमांड का कम से कम एक शब्दार्थ है जिसे आउटपुट में
एली हेडी

"एक कमांड के साथ कई कमांड" एक ऑक्सीमोरोन प्रतीत होता है, हालांकि - इसका क्या मतलब है? यदि यह कुछ इस तरह का है sudoतो आप केवल एक बार पासवर्ड दर्ज कर सकते हैं, फिर bash -cया उसी तरह से लपेट सकते हैं ।
रिचल्व

12

कंपाउंड कमांड नामक बैश मैनपेज सेक्शन में दो विकल्प हैं जो काम करेंगे, सूची और समूह कमांड।

एक समूह कमांड घुंघराले ब्रेस में संलग्न आदेशों की एक श्रृंखला है {}। एक सूची समान है, जो कोष्ठकों में संलग्न है ()। दोनों का उपयोग कई आदेशों को पृष्ठभूमि में करने के लिए किया जा सकता है, और अंत में एक सेट के रूप में पूरे संग्रह की पृष्ठभूमि के लिए। सूची का निर्माण एक उप-क्रम में कमांड निष्पादित करता है, इसलिए चर असाइनमेंट संरक्षित नहीं हैं।

आदेशों के समूह को निष्पादित करने के लिए:

{ command1 & command2 & } &

आप किसी सूची में अपनी आज्ञाओं को भी पूरा कर सकते हैं (सदस्यता):

( command1 & command2 ) &

1
आपका स्वागत है। मैंने मैनुअल से लिंक जोड़ा। ध्यान दें कि सूची ()सिंटैक्स, उप-क्रम में संलग्न आदेशों को निष्पादित करता है, इसलिए चर भीतर संरक्षित नहीं होते हैं।
एली हेडी

3

दूसरा रास्ता:

$(command1 &) && command2 & 

नहीं, यह पहली कमांड चलाएगा और फिर पहले खत्म करने के बाद यह एक और कमांड चलाएगा
राहुल पाटिल

आपने &&अपने प्रश्न में प्रयोग किया है, इसका मतलब है कि पहले एक कमांड को चलाएं, फिर सफल होने पर, अगली कमांड को चलाएं। यदि आप इस पर विचार नहीं करते हैं, तो आप चला सकते हैंcommand1 & ; command2 & ;
फ़ारसीगुल्फ़

पहला कमांड सफलतापूर्वक बीजी में चला जाता है, या ;उस मुद्दे के साथ कोई मुद्दा नहीं चलाता है
राहुल पाटिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.