कैसे चलाने में कमांड चलाने के बाद कमांड निष्पादित करें?


19

मैं फ़ाइल को wget के साथ डाउनलोड कर रहा हूं, और मैं चाहता हूं कि डाउनलोड समाप्त होने के बाद मैं अपना कंप्यूटर बंद कर दूं, लेकिन मुझे अब कहीं जाने की आवश्यकता है :) क्या यह संभव है कि bash में कमांड को निष्पादित किया जाए जब प्रक्रिया समाप्त हो जाएगी?

मुझे पता है कि यह काम करता है:

wget http://example.com/file.rar; शटडाउन अब

लेकिन क्या होगा अगर मैं केवल टाइप करता हूं:

wget http://example.com/file.rar

2
उपयोग करने पर विचार करें && और || के बजाय ;। && और || अगले कमांड को निष्पादित करने से पहले पिछले कमांड के रिटर्न वैल्यू की जांच करें ... बस अगर मामले में विफलता विफल हो जाती है, तो आप बंद नहीं करना चाहते हैं।
KFro

जवाबों:


31

आप ऐसा कुछ कर सकते हैं:

  1. ctrl-z के साथ wget का निष्पादन रोकें (इसे रोका नहीं गया, यह निलंबित है)
  2. इसे पृष्ठभूमि में रखें (बीजी)
  3. रन: प्रतीक्षा; शटडाउन -एच अब

प्रतीक्षा वर्तमान शेल से पृष्ठभूमि में चलाए गए सभी कार्यक्रमों की प्रतीक्षा करेगी - अर्थात यह दांव।

इंतजार खत्म होने के बाद- बंद होगा।


जब किया जाता है तो अपने wget उदाहरण को अग्रभूमि (fg) करना न भूलें। अगर wget पहले से चल रहा है, तो आप इसे ^ z (control-z) के साथ अग्रभूमि में रख सकते हैं।
एंड्रयू स्केग्नेली

4
जब तक आप वास्तव में प्रगति बार नहीं देखना चाहते, तब तक कोई ज़रूरत नहीं है।
dmckee

कोई ज़रूरत नहीं है क्योंकि वह मशीन को अपने पास छोड़ रहा है और फिर बंद हो गया है।
वुल्फ

11

दूसरे शेल में, उपयोग करें

ps -u <your username> | grep wget

आप जिस कमांड पर इंतजार करना चाहते हैं, उसका पीआईडी ​​ढूंढना है

wait <PID>; shutdown -h now

ताकि प्रक्रिया समाप्त होने तक शटडाउन न चले। डेस्पज का उत्तर भी देखें ।


+1, सिर्फ एक नोट: waitकेवल उसी शेल से शुरू किए गए कमांड के लिए काम करेगा
Chriki

5

मेरा समाधान यह है: नियंत्रण + Z के साथ अपने लंबे समय से चल रहे कार्य को निलंबित करें, फिर कुछ इस तरह लिखें:

fg; echo "Done!"

यदि आप अपने आदेश की सफलता या विफलता के आधार पर अलग-अलग प्रतिक्रिया चलाना चाहते हैं, तो && और || शॉर्ट-सर्किट ऑपरेटर के रूप में।

fg && echo "Success!" || echo "Failure!"

संपादित करें: यह sudo के साथ काम नहीं करेगा, क्योंकि यह आपके पासवर्ड के लिए पूछेगा। तदनुसार, मैंने सुडो का उपयोग करके उदाहरणों को हटा दिया है। यदि आपको दूसरे कार्य के लिए sudo की आवश्यकता है, तो यहां पोस्ट किए गए अन्य तरीकों का उपयोग करें।

दूसरी ओर, मेरा मानना ​​है कि GNOME और KDE दोनों सुडो का उपयोग किए बिना शटडाउन / रिबूट को ट्रिगर करने के तरीके प्रदान करते हैं, एक उपयुक्त डी-बस सिग्नल या कुछ और भेजकर।


+1 के लिए fg..., लेकिन sudoयह एक समस्या हो सकती है यदि यह आपको पासवर्ड के लिए संकेत देता है
mark4o

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

मेरे उद्देश्य के लिए यह उत्तर बेहतर है क्योंकि यह प्रक्रिया को स्वचालित रूप से अग्रभूमि में वापस रखता है
कुकी

इसके अलावा, sudo के लिए पासवर्ड को निष्क्रिय किया जा सकता है (प्रति उपयोगकर्ता और प्रति कमांड) - यदि उपयोगकर्ता को एक बार sudo के माध्यम से शटडाउन करने की अनुमति है, तो उसे हमेशा ऐसा करने की अनुमति दी जा सकती है। एक शत्रुतापूर्ण शटडाउन कुछ मामलों में खतरनाक नहीं हो सकता है - निश्चित रूप से उतना खतरनाक नहीं है जितना कि एक रनिंग मशीन पर समझौता किया गया अतिथि का उपयोग।
कुकी

1

हां, बस अपना दूसरा कमांड टाइप करें और एंटर दबाएं। यदि आपका वर्तमान कार्यक्रम पाठ स्क्रॉल कर रहा है, तो आप यह नहीं देख सकते हैं कि आप सही तरीके से क्या लिख ​​रहे हैं, इसलिए अपनी कुंजियाँ देखें ताकि आप इसे सही कर सकें।

एक बेहतर तरीका यह है कि आप किसी अन्य TTY (CTRL + ALT + F1 को F6 के माध्यम से) पर स्विच करें और कमांड को एक साथ चलाएं, या यदि आप स्क्रीन की तरह कमांड-लाइन प्रोग्राम का उपयोग कर रहे हैं, तो आप इसमें एक नई विंडो बना सकते हैं।


पहले विकल्प के लिए +1। मुझे डर है कि मुझे समझ नहीं आ रहा है कि दूसरा विकल्प कैसे काम करने वाला है।
इन्नाएम

उदाहरण के लिए CTRL + ALT + F2 आपको दबाने पर एक नया दूसरा कंसोल पर जाएगा जहां आप लॉगिन कर सकते हैं और एक कमांड टाइप कर सकते हैं, इस तरह से आप वहां दूसरी कमांड चला सकते हैं। दूसरा, यदि आप स्क्रीन डाउनलोड करते हैं (अधिक कंसोल तरीके से अपने कंसोल का उपयोग करने का एक कार्यक्रम) तो आप एक दूसरा टैब / विंडो खोल सकते हैं जहां आप फिर से कमांड कर सकते हैं, फिर से लॉगिन किए बिना। लेकिन जैसा कि आपको एक साथ इसकी आवश्यकता है, आप विकल्प 1 के साथ रह सकते हैं, मुझे नहीं लगता कि समान प्रभाव को प्राप्त करने का एक और तरीका है। जब तक आप एक स्क्रिप्ट के माध्यम से जांच करने के लिए किसी अन्य TTY / विंडो का उपयोग न करें यदि प्रक्रिया अभी भी चल रही है। :-P
तमारा विज्समन

Dmckee के उत्तर से प्रतीक्षा पीआईडी ​​का उपयोग करें
कुकी

1

यदि आप फैंसी प्राप्त करना चाहते हैं, तो दांव की वापसी की स्थिति की जांच करें और सफल होने पर केवल शटडाउन करें।

% wget http://example.com/file.rar
% if [ $? -eq 0 ]
> then
> shutdown now
> fi

2
स्क्रिप्टिंग के समय यह एक अच्छा तरीका है, लेकिन wgetरन बनाते समय आपको टेस्ट बनाने के लिए तुरंत वापस नहीं जाना चाहिए।
dmckee

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