एक पृष्ठभूमि आदेश के पूरा होने पर "डन" प्रदर्शित करने से बैश को रोकना


34

अगर मैं &इस तरह से पृष्ठभूमि में एक कमांड चलाता हूं :

sleep 2 &

जब आज्ञा पूरी हो जाती है, तो मुझे "हो गया"। मैं "पूर्ण" संदेश देखने से कैसे बच सकता हूं?

जवाबों:


34

एक सब-टाइम में कमांड चलाएँ:

(sleep 2 &)

कृपया ध्यान दें कि इसका उपयोग करके, आप कॉलर शेल के अंदर नौकरियों को नियंत्रित jobsकरेंगे ( कुछ नहीं दिखाएंगे)।
9

36

निर्मित शेल को निष्पादित करें:

$ set +m

यह "मॉनिटर मोड" को बंद करके काम करता है, इसलिए शेल पृष्ठभूमि की नौकरियों को समाप्त करने की रिपोर्ट नहीं करता है।

हालांकि एक उप-प्रकार में कमांड चलाना:

$ (sleep 2&)

... संदेश को भी अक्षम कर देगा , इसका एकमात्र कारण यह है क्योंकि मॉनिटर मोड केवल इंटरेक्टिव शेल के लिए डिफ़ॉल्ट रूप से सक्षम है। यही है, एक अतिरिक्त शेल चलाकर संदेश उपखंड से बच जाता है जिसमें एक स्वचालित "सेट + एम" होता है।


4
एक ध्यान देना चाहिए, कि यह आउटपुट नींद द्वारा नहीं किया जाता है। इसका बैश शेल जो आपको तैयार पृष्ठभूमि की नौकरी के बारे में बताता है।
फ्लो जूल

8

मैं पहले के दो उत्तर स्पष्ट करना चाहूंगा। यदि आप चाहते हैं कि आपके शेल में किसी भी कमांड से किया गया डोन संदेश देखने के लिए नहीं है, set +mतो जाने का रास्ता है। बस इसे अपने .profile और / या .bashrc में डालें और किया जाए। हालाँकि, ध्यान दें कि यदि आप यह लिखते हैं:

set +m
sleep 2 &
set -m

और अंतिम के बाद नींद समाप्त हो जाती है set -m, फिर भी आपको किया गया संदेश मिल जाएगा।

यदि आप किसी एकल कमांड मंगलाचरण के लिए संदेश को अक्षम करना चाहते हैं, तो सबस्क्रिप्शन तकनीक (sleep 2 &)जाने का रास्ता है।

सभी ईमानदारी में, मैं केवल इस बारे में जानता था set +m, इसलिए मुझे ज्ञानवर्धन के लिए Wooble करना +1। हालांकि, यह ध्यान देने योग्य है कि आप जो दो समाधान चाहते हैं, उस पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।


0

बिना सबस्क्रिप्शन के , आप निम्न कार्य कर सकते हैं:

silent_background() {
    { 2>&3 "$@"& } 3>&2 2>-
    disown &>/dev/null  # Close STD{OUT,ERR} for silence if job has already completed
}

silent_background sleep 5

के आधार पर इस जवाब

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