बैकग्राउंड में शेल स्क्रिप्ट कैसे चलाएं और कोई आउटपुट नहीं मिलता है


111

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

जवाबों:


220

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

आउटपुट को अनदेखा करने के लिए स्टडआउट और स्टेडर को रीडायरेक्ट करें /dev/null

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

बस जोड़ने के लिए, कभी-कभी स्क्रिप्ट के लिए तर्क होते हैं फिर ऊपर की कमांड Ambiguous output redirect को वापस कर देगी ।
sabertooth1990

एक बेहतर तरीका जो मुझे मिला वह यह है कि nohup /path/to/your/script.sh parameter1 > & 1 &अगर कोई बेहतर तरीका जानता है तो उसका उपयोग कर सकता है।
sabertooth1990

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

1
@ sabertooth1990 आपकी कमांड लाइन दोषपूर्ण है:-bash: syntax error near unexpected token '&'
नोट्स-

1
फिर आप बनाई गई प्रक्रिया को कैसे मारेंगे?
एलेक्सिस_ए

32

आउटपुट को इस तरह फ़ाइल में पुनर्निर्देशित करें:

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

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

./a.sh > stdoutfile 2> stderrfile &

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

पुनर्निर्देशन के बारे में जानकारी के लिए बैश मैनपेज देखें ।


23

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

यह आउटपुट को अशक्त करने के लिए पुनर्निर्देशित करता है और स्क्रीन को साफ रखता है:

command &>/dev/null &

2
नोट: टर्मिनल बंद होने पर कमांड को समाप्त कर दिया जाएगा।
केले

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

13

यदि वे आपकी स्क्रिप्ट के समान निर्देशिका में हैं, जिसमें शामिल हैं:

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

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

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


7

नोटिफिकेशन हटाने और STDOUT और STDERR को बंद करने के लिए एक सब-रन में चलाएं:

(&>/dev/null script.sh &)

यह एकमात्र उत्तर है जो पृष्ठभूमि के जॉब लॉग्स को भी [1] + 54765 done <emacs>धन्यवाद के रूप में नहीं छापता है
जूल

2

यदि आप लिपिक्स किकस्टार्ट में स्क्रिप्ट चलाना चाहते हैं तो आपको नीचे की तरह भागना होगा।

sh /tmp/script.sh > /dev/null 2>&1 < /dev/null &


0

ये उदाहरण ठीक काम करते हैं:

nohup sh prog.sh proglog.log 2> और 1 &

पाश के लिए आप इस तरह का उपयोग कर सकते हैं:

i में {1..10} के लिए; शोग करना; नींद 1; किया prog.log 2> और 1 &

यह पृष्ठभूमि में काम करता है और कोई आउटपुट नहीं दिखाता है।

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