मैं एक कमांड चेन को बैकग्राउंड करना चाहता हूं cp a b && mv b c && rm a
।
मैंने करने की कोशिश की है cp a b && mv b c && rm a &
लेकिन यह केवल अंतिम प्रक्रिया की पृष्ठभूमि है।
मैं एक आदेश श्रृंखला कैसे पृष्ठभूमि करूँ?
मैं एक कमांड चेन को बैकग्राउंड करना चाहता हूं cp a b && mv b c && rm a
।
मैंने करने की कोशिश की है cp a b && mv b c && rm a &
लेकिन यह केवल अंतिम प्रक्रिया की पृष्ठभूमि है।
मैं एक आदेश श्रृंखला कैसे पृष्ठभूमि करूँ?
जवाबों:
cp a b && mv b c && rm a &
सही है। &
की तुलना में कम पूर्वता है &&
। वास्तव &
में इसके अलावा ;
और न्यूलाइन की तुलना में कुछ भी कम नहीं है : &
एक ही वाक्यात्मक श्रेणी में है ;
, अंतर यह है कि पृष्ठभूमि में इसे चलाते ;
समय कमांड सूची अग्रभूमि में &
चलती है। आप इसे अपने लिए परख सकते हैं:
$ dash -c 'sleep 2 && echo waited & echo backgrounded'
backgrounded
$ waited
Pdksh, ksh93, bash, csh, tsh के साथ भी।
अपवाद zsh है, जो अजीब तरह से असंगत है। यह मैनुअल में प्रलेखित है :
यदि एक सबलिस्ट एक द्वारा समाप्त किया जाता है
&
,&|
या&!
, तो शेल बैकग्राउंड में अंतिम पाइपलाइन को निष्पादित करता है, और इसके खत्म होने का इंतजार नहीं करता है (अन्य शेल से अंतर को नोट करें जो बैकग्राउंड में पूरे सबलिस्ट को निष्पादित करता है)।
दुर्भाग्यवश, zsh श या ksh संगतता मोड में भी इस तरह से व्यवहार करता है। यह सुनिश्चित करने के लिए कि पूरे कमांड को पृष्ठभूमि में निष्पादित किया गया है, इसके चारों ओर ब्रेसिज़ या कोष्ठक डालें। कोष्ठक एक उपधारा बनाते हैं जबकि ब्रेसिज़ नहीं होते हैं, लेकिन यह अप्रासंगिक है (कुछ गोले में एक माइक्रो-ऑप्टिमाइज़ेशन के अलावा) चूंकि पृष्ठभूमि वाली कमान वैसे भी उप-संस्करण में है।
{ cp a b && mv b c && rm a; } &
आप इसे (cp a b && mv b c && rm a )&
पूरी श्रृंखला में शामिल करना पसंद कर सकते हैं।
{ ... ; }
है कि एक बेहतर तरीका (तरीका) है।
{ ... ; } &
वर्तमान प्रक्रिया स्तर पर एक कांटा करते( ... ) &
हैं , जबकि एक उपखंड से एक कांटा करते हैं ... परिणाम समान है, लेकिन वैसे भी एक सूक्ष्म अंतर है।