2012-02-08 16 views
67

प्राप्त करें मैंने दो खोल स्क्रिप्ट ए.एस. और बी.एस. A.sh और b.sh में मेरे पास लूप के लिए अनंत है और वे कुछ आउटपुट टर्मिनल पर प्रिंट करते हैं। मैं एक और स्क्रिप्ट लिखना चाहता हूं जो a.sh और b.sh दोनों को कॉल करता है लेकिन मैं चाहता हूं कि उपयोगकर्ता असीमित रूप से चलने के बजाय टर्मिनल पर नियंत्रण प्राप्त कर ले और मैं टर्मिनल में आउटपुट छिपाना चाहता हूं।पृष्ठभूमि में एक शेल स्क्रिप्ट कैसे चलाएं और आउटपुट

उत्तर

139

nohup का उपयोग करें यदि आपकी पृष्ठभूमि नौकरी खत्म होने में लंबा समय लगता है या आप केवल सिक्योरसीआरटी या सर्वर जैसे लॉगिन करते हैं।

/dev/null को stdout और stderr पुन: निर्देशित उत्पादन की अनदेखी करने के।

nohup /path/to/your/script.sh > /dev/null 2>&1 & 
+0

बस जोड़ने के लिए, कभी-कभी स्क्रिप्ट के लिए तर्क होते हैं तो उपरोक्त आदेश वापस आ जाएगा ** अस्पष्ट आउटपुट रीडायरेक्ट **। – sabertooth1990

+0

मुझे मिला एक बेहतर तरीका 'nohup /path/to/your/script.sh पैरामीटर 1> और 1 और ' का उपयोग करना है यदि कोई बेहतर तरीका जानता है। – sabertooth1990

+2

यदि आप 'नोहुप' का उपयोग कर रहे हैं, तो आपको '/ dev/null 2> और 1' की आवश्यकता नहीं है क्योंकि यह पहले से ही सभी STDOUT और STDERR स्ट्रीम को स्वचालित रूप से nohup.out फ़ाइल में जोड़ता है। केवल उपयोग करें: 'नोहुप/पथ/से/आपका/कमांड और ' – leonarth

11

वे अपनी स्क्रिप्ट के रूप में ही निर्देशिका में शामिल है कि में हैं:

./a.sh > /dev/null 2>&1 & 
./b.sh > /dev/null 2>&1 & 

& अंत में क्या पृष्ठभूमि में चलाने अपनी स्क्रिप्ट बनाता है।

> /dev/null 2>&1 भाग आवश्यक नहीं है - यह stdout और stderr धाराओं को पुनर्निर्देशित करता है ताकि आपको उन्हें टर्मिनल पर नहीं देखना पड़े, जो आप बहुत सारे आउटपुट के साथ शोर स्क्रिप्ट के लिए करना चाहते हैं।

+0

प्रत्येक शरीर का धन्यवाद। सभी उत्तर वास्तव में धन्यवाद उपयोगी थे। –

23

इस तरह की एक फाइल करने के लिए उत्पादन रीडायरेक्ट करें:

./a.sh > somefile 2>&1 & 

यह एक ही फाइल करने के लिए दोनों stdout और stderr पर पहुंच जाएंगे। आप दो अलग अलग फ़ाइलों के लिए stdout और stderr रीडायरेक्ट करने के लिए चाहते हैं, तो इस का उपयोग करें:

./a.sh > stdoutfile 2> stderrfile & 

आप /dev/null एक या फ़ाइलों के दोनों रूप में उपयोग कर सकते हैं अगर आप stdout और/या stderr के बारे में परवाह नहीं है।

रीडायरेक्शन के बारे में विवरण के लिए bash manpage देखें।

13

क्षमा करें यह थोड़ी देर हो चुकी है, लेकिन somple आदेश के लिए आदर्श समाधान है जहाँ आप किसी भी मानक या त्रुटि निर्गम (क्रेडिट जहां यह कारण बताया गया है: http://felixmilea.com/2014/12/running-bash-commands-background-properly/) नहीं करना चाहती पाया

यह आउटपुट पुनर्निर्देश शून्य पर और स्क्रीन साफ़ करता है:

command &>/dev/null & 
+0

नोट: टर्मिनल के दौरान आदेश समाप्त हो जाएगा बंद हो गया है। – Banana

+0

भविष्य में इसे देखने वाले किसी भी व्यक्ति के लिए जो सत्र समाप्त होने के बाद चलने वाले आदेशों को रखने का समाधान चाहता है, मैं स्क्रीन या टीएमयूक्स का सुझाव दूंगा। वे आवश्यक 'सत्र के भीतर सत्र' चलाते हैं जो प्रारंभिक सत्र को बंद करने के बाद चलता है। यदि आप वापस लॉग इन करते हैं तो आप चालू सत्र से फिर से कनेक्ट कर सकते हैं। rsync बैकअप चलाने के लिए बढ़िया उदाहरण के लिए जहां सिंक को लंबे समय तक चलाने की आवश्यकता है और आप अपना सत्र चलाना नहीं चाहते हैं। – DanteAlighieri

संबंधित मुद्दे