मुझे लगता है कि आप यह चाहते हैं:
myCommand1 & myCommand2 &
यह शुरू होता है myCommand1
और इसे बैकग्राउंड में भेजता है क्योंकि इसके बाद एम्परसेंड होता है, फिर तुरंत शुरू होता है myCommand2
और बैकग्राउंड को भी भेजता है, इसलिए शेल को फिर से जारी करता है।
सूचियाँ
बेहतर समझ के लिए आप यहां कमांड द्वारा पाइप लाइन को स्थानापन्न कर सकते हैं।
एक सूची एक या एक से अधिक पाइपलाइनों का एक क्रम है जो ऑपरेटरों में से एक द्वारा अलग किया जाता है ; , और , && , या || , और वैकल्पिक रूप से एक द्वारा समाप्त
; , और , या ।
यदि नियंत्रण ऑपरेटर द्वारा एक कमांड को समाप्त किया जाता है और , शेल एक उपधारा में पृष्ठभूमि में कमांड को निष्पादित करता है। शेल कमांड के समाप्त होने की प्रतीक्षा नहीं करता है, और वापसी की स्थिति 0. है कमांड को एक से अलग किया गया है ; क्रमिक रूप से निष्पादित किया जाता है; शेल प्रत्येक कमांड के बदले में समाप्त होने का इंतजार करता है। वापसी की स्थिति निष्पादित अंतिम कमांड की निकास स्थिति है।
AND और OR सूचियाँ && और || से अलग एक या अधिक पाइपलाइनों के अनुक्रम हैं क्रमशः नियंत्रण संचालक।
स्रोत:man bash
चलिए इसे नीचे उदाहरणों में तोड़ते हैं। आप कमांड को जोड़कर और इनमें से किसी एक के साथ अलग करके एक सूची बना सकते हैं ; & && ||
:
command1 ; command2 # runs sequentially
command1 && command2 # runs sequentially, runs command2 only if command1 succeeds
command1 || command2 # runs sequentially, runs command2 only if command1 fails
command1 & command2 # runs simultaneously
आप इनमें से किसी एक के साथ सूची को समाप्त कर सकते हैं: ; & <newline>
।
आम तौर पर आप एक कमांड या एक सूची को दबाकर निष्पादित करते हैं Enter, जो बराबर होती है <newline>
। अर्धविराम ;
विशेष रूप से लिपियों में एक ही उद्देश्य प्रदान करता है। &
हालाँकि, Ampersand पृष्ठभूमि में एक उपश्रेणी में कमांड शुरू करता है, तुरंत शेल को रिलीज़ करता है।
आप समूह सूचियों को आगे करने के लिए गोल ()
या घुंघराले कोष्ठक {}
का उपयोग कर सकते हैं , अंतर यह है कि गोल कोष्ठक एक उप-भाग को घुमाने लगते हैं और घुंघराले नहीं होते हैं। घुंघराले कोष्ठक को पहले और अर्धविराम या समापन कोष्ठक से पहले एक नई रेखा के बाद एक स्थान की आवश्यकता होती है। उदाहरण के लिए:
# if c1 succeeds start a shell in the background
# and run c2 and c3 sequentially inside it
c1 && ( c2 ; c3 ) &
# run c1 and if it succeeds c2 sequentially as a group command
# if c1 or c2 fail run c3 in the background
{ c1 && c2 ;} || c3 &
यह काफी जटिल हो सकता है, यदि आप अनिश्चित उपयोग कर रहे हैं true
और false
परीक्षण कर सकते हैं कि निर्माण कार्य अपेक्षित है:
$ { true && true ;} || echo 2
$ { true && false ;} || echo 2
2
नौकरी पर नियंत्रण
jobs
आदेश प्रदर्शित करता चला रहे या हाल ही में वर्तमान खोल में समाप्त कर दिया गया है पृष्ठभूमि कार्यों की सूची। नौकरी नियंत्रण के लिए कई कीबोर्ड शॉर्टकट और कमांड हैं:
- Ctrl+ Zप्रकार निलंबित , चरित्र है कि वर्तमान में अग्रभूमि में चलने वाली प्रक्रिया का कारण बनता है बंद कर दिया जाना करने के लिए इसे समाप्त नहीं है, लेकिन में अवशेष
jobs
सूची
- Ctrl+ Yप्रकार निलंबित देरी चरित्र है कि वर्तमान में अग्रभूमि में चलने वाली प्रक्रिया का कारण बनता है जब यह टर्मिनल से इनपुट को पढ़ने के लिए प्रयास करता है बंद कर दिया जाना करने के लिए
fg
= %
अग्रभूमि में एक प्रक्रिया शुरू करता है यदि आवश्यक हो, तो आप इस प्रक्रिया को निम्नानुसार निर्दिष्ट कर सकते हैं:
% # last process in the jobs list
%1 # 1st process in the jobs list
%abc # process beginning with the string “abc”
%?abc # process containing the string “abc” anywhere
bg
= %&
यदि आवश्यक हो तो इसे शुरू करने वाली पृष्ठभूमि में एक प्रक्रिया लेता है:
%& # last process in the jobs list
%1& # 1st process in the jobs list
%abc& # process beginning with the string “abc”
%?abc& # process containing the string “abc” anywhere
wait
एक पृष्ठभूमि प्रक्रिया के समाप्त होने की प्रतीक्षा करता है और अपनी समाप्ति स्थिति देता है:
wait %1 # 1st process in the jobs list
कल्पना करें कि आपने एक लंबी प्रक्रिया शुरू कर दी ( jobs
यह संख्या 3 है) का पता चलता है और फिर एहसास होता है कि कंप्यूटर समाप्त होने पर निलंबित होना चाहता है, साथ ही echo
एक संदेश भी अगर प्रक्रिया सफल नहीं हुई:
wait %3 || echo failed ; systemctl suspend