शेल के लिए कई कमांड कैसे भेजें और सिरों के पीछे इंतजार करें [बंद]


16

मेरे पास लगभग 20 कमांड हैं और मुझे इन सभी को यूनिक्स शेल में भेजना है और परिणाम को कॉपी करना है, लेकिन मुझे नहीं पता कि यह कैसे करना है।

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

कमांड 1 - एक सर्वर से कनेक्ट करें।

कमांड 1 खत्म होने तक प्रतीक्षा करें

कमांड 2 - सर्वर 1 से सभी जानकारी अपडेट करें

रुको।

आज्ञा ३ । कुछ पैरामीटर प्राप्त करें।

... और इस तरह के आदेश।

मैं करने की कोशिश की के साथ cmd1 | cmd2 | cmd3 और cmd1 & cmd2 & cmd3 औरcmd1;cmd2

यह समस्या cmd1एक RNC (नेटवर्क तत्व) से जुड़ी हुई है और इसमें 15 सेकंड लगते हैं, उसके बाद cmd2इसका अर्थ होता है। लेकिन सिर्फ पहले cmd के लिए काम करते हैं। कोई सुराग, यह कैसे चलाना है?


3
एक स्क्रिप्ट का उपयोग करें? या &&आज्ञाओं के बीच।
बर्नहार्ड

जवाबों:


20

आमतौर पर बस cmd1;cmd2;cmd3;cmd4(यदि आप इसे एक पंक्ति पर लिखना चाहते थे), या cmd1 && cmd2 && cmd3 && cmd4यदि आप cmd3 को चलाना नहीं चाहते हैं तो cmd2 के विफल होने पर उपयोग कर सकते हैं।

वैकल्पिक रूप से ;आप प्रति पंक्ति केवल एक कमांड लिख सकते हैं।

cmd1
cmd2
cmd3
cmd4

यदि आप चाहते हैं कि आदेश पृष्ठभूमि में समानांतर में चलें, तो आप उपयोग भी कर सकते हैं

cmd1 &
cmd2 &
cmd3 &
cmd4 &
wait # for cmd1-4 to finish

या तो उन तरीकों को एक शेल स्क्रिप्ट में भी रखा जा सकता है। शेल स्क्रिप्ट में आप क्या लिखते हैं और वास्तविक शेल में आप क्या लिखते हैं, इसके बीच बहुत कम अंतर है।


MM समस्या जब मैं cmd1 भेजता हूँ तो इसे वास्तव में लगभग 6 सेकंड समाप्त करना पड़ता है, समस्या जब इसे cmd2 और cmd1 भेजती है तब भी इसकी प्रॉसेसिंग विफल हो जाती है।
जोनाथन राउल तापिया लोपेज़

4
इस cmd1;cmd2मामले में (या cmd1 && cmd2उस मामले के लिए) cmd2 तब तक नहीं चलेगा जब तक कि cmd1 बाहर नहीं निकलता (और इस प्रकार संभवतः समाप्त हो गया)। इसलिए कोई समस्या नहीं होनी चाहिए - कृपया अपने प्रश्न को फिर से लिखें, या एक उदाहरण प्रदान करें कि लोग वास्तव में पुन: पेश कर सकते हैं।
फ्रॉस्ट्सचुट्ज़

ठीक है मैं सवाल को संशोधित करने वाला हूं। धन्यवाद
जोनाथन राउल तापिया लोपेज़

2

sleepयदि आपका वातावरण इसकी अनुमति देता है, तो आप इस पर गौर करना चाहते हैं । पूरा क्रम तब कुछ इस तरह होगा cmd1 && sleep 10s && cmd2
यहाँ नींद के लिए प्रासंगिक मैन पेज है


नींद / प्रतीक्षा केवल तभी उपयोगी है जब आप निर्धारित करते हैं कि पिछले कार्यक्रम (जो पृष्ठभूमि की प्रक्रिया को आगे बढ़ा सकता है) कितनी देर तक समाप्त होता है और बाहर निकलता है (आईई द हेलिंग प्रॉब्लम) या यदि आप गारंटी देते हैं कि आप अंतराल के बाद अपनी दूसरी कमांड को चलाना और चलाना चाहते हैं। बीत गया है, जो हो सकता है अगर दोनों अतुल्यकालिक हैं, लेकिन आप अभी भी उनके बीच कुछ समय चाहते हैं। सबसे अधिक संभावना है, यह नहीं है कि आप क्या चाहते हैं। व्यावहारिक रूप से, यह काम कर सकता है। लेकिन यह विश्वसनीय नहीं है।
जस्टिन रीव्स

1

बस एक स्क्रिप्ट का उपयोग करें, एक फाइल जिसमें कमांड को एक के बाद एक चलाने के लिए है, जैसे:

#!/bin/sh

command-01
command-02
...
command-20

पहली पंक्ति (शेबंग) का उपयोग करके निम्नलिखित कमांड चलाने के लिए कहता है /bin/sh, फ़ाइल को निष्पादन योग्य ( chmod u+x your-little-script) बनाएं फिर आप इसे चला सकते हैं ./my-little-script। इस तरह आप कुछ कदम बाहर नहीं छोड़ेंगे; ;-)

शेल के लिए मैनुअल पढ़ें, यह एक पूर्ण प्रोग्रामिंग भाषा प्रदान करता है। जाँच करें bash(1)कि क्या उपलब्ध है, वरना कोर्न शेल ksh(1)। वे लिपियों में नियंत्रण के प्रवाह (या अंतःक्रियात्मक रूप से, इस मामले के लिए) के लिए बहुत सारी उपयोगी सुविधाएँ प्रदान करते हैं।


धन्यवाद, लेकिन मैं स्क्रिट का उपयोग नहीं कर सकता।
जोनाथन राउल तापिया लोपेज़

क्यों? किसी भी मामले में, जब तक कि यह बहुत फासीवादी वातावरण नहीं है, आपको स्क्रिप्ट का स्रोत बनाने में सक्षम होना चाहिए: source your-little-script(या . your-little-scriptसंक्षेप में)।
वॉनब्रांड

ब्यूसेज़, मैं यूनिक्स प्रणाली तक सीधे पहुँच प्राप्त करता हूँ, मुझे एक मिनी प्रोग्राम पसंद है जो सिर्फ लाइनों में cmd ​​निष्पादित करने और चीखने से परिणाम प्राप्त करने के लिए अनुमति देता है, और उपयोग के लिए Im इस आदेश के साथ उपयोग करने के लिए परिमार्जन का उपयोग करने के लिए व्यावहारिक नहीं है।
जोनाथन राउल तापिया लोपेज़

ठीक है, जो चीजों को थोड़ा स्पष्ट करता है ... आपके आदेशों का मूल / गंतव्य क्या पर्यावरण है? आप कमांड को निष्पादित करने के लिए शिप करने के लिए क्या उपयोग करते हैं? सुदूर वातावरण क्या है? क्या आपके सेटअप है वहाँ (आप एक नियमित खाता है, कि आप के माध्यम से उपयोग कर सकते हैं sshया PuTTYशायद?
vonbrand

-1

आप expectभेजने के लिए अपने स्थानीय कंप्यूटर पर कुछ चला सकते हैं cmd1और इसे जारी करने से पहले समाप्त करने के लिए प्रतीक्षा करें cmd2आदि। आपको प्रतीक्षा करने के लिए एक उचित अवधि का पता लगाना होगा, या एक विशिष्ट आउटपुट जो इंगित करता है कि एक उचित लिखने के लिए आदेश दिया गया है। स्क्रिप्ट की उम्मीद है।

बेशक, cmd1; cmd2; cmd3; cmd4 एक आदेश में आदेशों को क्रम में निष्पादित करेगा, एक के बाद एक।

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