क्या टर्मिनल पर धारावाहिक कार्य प्रदान करने का एक तरीका है, जबकि एक कार्य निष्पादित कर रहा है (एक फ़ाइल का उपयोग किए बिना)?


14

मान लीजिए कि 2 कार्य हैं t1, t2जिन्हें नीचे दिए गए क्रमबद्ध तरीके से अंजाम दिया जा सकता है:

t1 ; t2
# OR
t1 && t2

अब मान लीजिए कि मैं भागना भूल गया t2और t1पहले से ही चल रहा हूं; क्या मैं t2पाइपलाइन में जोड़ सकता हूं ताकि यह t1खत्म होने के बाद निष्पादित हो जाए ?

जवाबों:


19

हाँ तुम कर सकते हो:

  1. + दबाकर सस्पेंड कैरेक्टर के साथ वर्तमान में चल रहे काम को रोकेंCtrlZ
  2. टाइप fgया% , सूची में जो आप चाहते हैं उसे जोड़ें और इसे निष्पादित करें, जैसे:
    fg ; systemctl suspend # or
    % ; systemctl suspend
    चूंकि fgनौकरी का फिर से शुरू हुआ रिटर्न रिटर्न, सूची ऑपरेटरों की तरह &&और ||उम्मीद के मुताबिक काम करते हैं:
    fg && echo "Finished successfully!" # or
    % && echo "Finished successfully!"

man bash/ JOB नियंत्रण सस्पेंड चरित्र के बारे में कहते हैं:

सस्पेंड कैरेक्टर टाइप करना (आमतौर पर ^Z, Control- Z) जब एक प्रक्रिया चल रही होती है, तो उस प्रक्रिया को रोक दिया जाता है और नियंत्रण को वापस कर देता है bash। (…) उपयोगकर्ता इस कार्य की स्थिति में फेरबदल कर सकता bgहै, पृष्ठभूमि में इसे जारी रखने के लिए कमांड का उपयोग करके , fg इसे अग्रभूमि में जारी रखने के लिए killकमांड , या इसे मारने के लिए आदेश। A ^Zतुरंत प्रभाव डालता है, और लंबित आउटपुट और टाइप-हेड को छोड़ने का अतिरिक्त दुष्प्रभाव होता है।

fgमें समझाया गया है man bash/ शेल बिल्डिंग्स कमैंट्स :

fg [ jobspec ] अग्रभूमि में jobspec को
फिर से शुरू करें , और इसे वर्तमान नौकरी बनाएं। यदि जॉबस्पेक मौजूद नहीं है, तो वर्तमान नौकरी की शेल की धारणा का उपयोग किया जाता है। रिटर्न वैल्यू यह है कि कमांड को अग्रभूमि में रखा जाए, या असफलता दी जाए, जब जॉब कंट्रोल को डिसेबल कर दिया जाए या जॉब कंट्रोल से इनेबल होने पर रन किया जाए, अगर जॉबस्पेक एक वैध जॉब को निर्दिष्ट नहीं करता है या जॉबस्पेक एक जॉब को निर्दिष्ट करता है जो बिना जॉब कंट्रोल के शुरू किया गया था ।

आगे पढ़ने ( man bashनौकरी से अलग ) पर नियंत्रण:


+1 लेकिन यह शर्म की बात यह है जब आप भूल जाते हैं काम नहीं करता है t3में t1; t2; t3या t1 && t2 && t3
जोएल

@JoL यह सच है - ^Z^Zऔर %-;%+;t3कुछ मामलों में काफी अच्छा है, लेकिन यह समस्या का वास्तविक समाधान होने से बहुत दूर है।
मिठाई

2

मैंने इस विधि को यहाँ देखा: /superuser/334272/how-to-run-a-command-after-an-already-running-existing-one-finishes

जहां पहले क्या Ctrl+ zस्टॉप के लिए (निलंबित) चल रहा एक तो आप की तरह तो याद कमांड चलाएँ: fg && ./missed_cmd.shऔर यह जैसे ही चलेंगे fgखत्म।

fg(अग्रभूमि आदेश) को निलंबित कर दिया काम ऑनलाइन लाना होगा और &&यह सुनिश्चित करेंगे कि याद आदेश केवल तभी पहले आदेश सफल होता चलाया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.