कमांड निष्पादित करते समय टर्मिनल आउटपुट कैसे छिपाएं?


62

जब मैं 11.10 में कमांड लाइन से ग्रहण और दस्तावेज़ दर्शक जैसे कुछ प्रोग्राम लॉन्च करता हूं, तो यह उन सूचनाओं के भार को जन्म देता है जो कि असंगत लगती हैं।

इसके अलावा जब वे पृष्ठभूमि में चलाए जाते हैं, तो वे कभी-कभी टर्मिनल का उत्पादन जारी रखते हैं, जो मैं वर्तमान में काम कर रहा हूं, जो परेशान है।

मैं चाहूंगा कि वे केवल लॉन्च करें और पृष्ठभूमि में पृष्ठभूमि का सामान रखें। मेरा तर्क यह है कि यदि आप GUI (जैसे किसी आइकन पर डबल क्लिक) के माध्यम से इन कार्यक्रमों को लॉन्च करते हैं, तो ये संदेश मुझे कभी नहीं दिखाए जाते हैं, इसलिए मुझे कमांड लाइन में उनकी आवश्यकता नहीं है।


जवाबों:


81

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

$ eclipse >/dev/null

और कोई आउटपुट नहीं बनाया जाना चाहिए।

त्रुटि संदेशों को भी दबाने के लिए:

$ eclipse >/dev/null 2>&1

या बस में, बस:

$ eclipse &>/dev/null

लेकिन अगर वे इसे किसी तरह से अलग करते हैं तो इसे कंसोल में लिखने से रोकने में समस्या हो सकती है।

यदि संभव हो तो MuffinStateWide द्वारा दिए गए समाधान का उपयोग करें


2
से eclipse 2&>1 >/dev/nullछुटकारा पाने के लिए करना चाहते हैं stderr। डिफ़ॉल्ट केवल पुनर्निर्देशित करता है stdout। और इसे करने के लिए कोई "अलग" तरीका नहीं है, यदि आप स्टडआउट और स्टडर दोनों को निडर में शुद्ध करते हैं, तो कोई आउटपुट नहीं होगा।
TC1

@ TC1 सिद्धांत रूप में, एक कार्यक्रम फिर से खोलना / dev / tty और वहां आउटपुट प्रिंट कर सकता है। व्यवहार में, GUI कार्यक्रम ऐसा नहीं करेंगे।
रैंडम 832

@ Random832 अच्छी तरह से सिद्धांत रूप में, मैं सुझाव दूंगा कि अतिरिक्त lulz के लिए / stderr / dev / dsp या aplayr को पाइपिंग ... :) लेकिन आप सही कह रहे हैं, सिद्धांत रूप में ऐसा किया जा सकता है, व्यवहार में - मैं शायद कम से कम उस अपवित्र ईमेल को उस आदमी को लिखें जिसने ऐसा किया था।
TC1

5
@ TC1 "2> & 1> / dev / null" बिटकॉइन के लिए स्टडआउट को रीडायरेक्ट करेगा, लेकिन स्टैडर को रीडायरेक्ट नहीं किया जाएगा। आपको आदेश को उलटने और "> / dev / null 2> & 1" करने की आवश्यकता है
विलियम पार्सल

9
आप भी बस कर सकते हैं eclipse &> /dev/null:। वह स्टडिन और स्टेडर दोनों को रीडायरेक्ट पॉइंट (बैश में) पकड़ता है
वॉरेन

12

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

उदाहरण के लिए: मान लें कि आप gvimकमांड लाइन से (एक gui text editor) लॉन्च करना चाहते हैं ।

आप इस तरह एक समारोह लिख सकते हैं:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}

(इस फ़ंक्शन को अपनी फ़ाइल .bashrcया .bash_aliasesफ़ाइल में जोड़ें ताकि यह हमेशा लोड रहे)

व्याख्या:

  • यह gvimकमांड को बैश फ़ंक्शन के साथ भी नाम देगा gvim(इसलिए जब आप gvimबैश प्रॉम्प्ट पर टाइप करते हैं , तो यह gvimवास्तविक gvimफ़ंक्शन को निष्पादित करने के बजाय आपके फ़ंक्शन को कॉल करेगा । आपका फ़ंक्शन तब वास्तविक gvimकमांड को कॉल करता है (और इसके नियमित आर्ग को स्वीकार करता है), के साथ। कुछ अतिरिक्त विशेषताएं:

    • करने के लिए stdout और stderr को रीडायरेक्ट करता है /dev/null(टर्मिनल में आउटपुट दबाता है)
    • &पृष्ठभूमि में कमांड चलाने के लिए उपयोग करता है (ताकि आपका शेल ब्लॉक न हो)
    • disownशेल से पृष्ठभूमि नौकरी को हटाने के लिए उपयोग करता है (इसलिए यह सक्रिय नौकरियों की सूची में प्रकट नहीं होगा)
    • nohupटर्मिनल से प्रक्रिया को अलग करने का उपयोग करता है (ताकि आप अपने शेल सत्र को समाप्त कर सकें या प्रक्रिया को मारे बिना अपने टर्मिनल को बंद कर सकें)

btw, मुझे लगता है कि यह @Misery
कोरी गोल्डबर्ग से

6

एक कमांड स्विच के रूप में --help जोड़ने की कोशिश करें और "शांत" की तलाश करें यह आउटपुट को दबा देना चाहिए, या बस GUI से लॉन्च करना चाहिए। और स्विच के साथ लॉन्च करें या स्क्रिप्ट के माध्यम से इसे दबाने का तरीका ढूंढें

व्यक्तिगत रूप से मैं उस आउटपुट को प्राप्त करने के लिए cli से लॉन्च करता हूं ताकि सभी GUI ऐप्स के लिए यह संभव न हो।

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