लिनक्स में शेल एप्लिकेशन के आउटपुट को कैसे छिपाएं?


जवाबों:


68

आप किसी भी प्रोग्राम के आउटपुट को रीडायरेक्ट कर सकते हैं ताकि वह दिखाई न दे।

$ program > /dev/null

यह मानक आउटपुट को रीडायरेक्ट करेगा - आपको अभी भी कोई त्रुटि दिखाई देगी

$ program &> /dev/null

यह त्रुटियों सहित सभी आउटपुट को पुनर्निर्देशित करेगा।


पहले वाले ने wget के लिए काम नहीं किया
जाडर डायस

इसका कारण यह है कि इसमें से कुछ के लिए wget stderr का उपयोग करता है। दूसरा काम करना चाहिए।
theotherreceive

2
संयोग से, आप उस लॉग आउटपुट को एक फ़ाइल में सहेजना चाहते हैं, इसलिए जब / यदि आपका डाउनलोड काम करना बंद कर देता है, तो आप यह पता लगा सकते हैं कि क्यों। अगर यह एक स्क्रिप्ट में वैसे भी है। यदि यह एक प्रकार का बंद रन है, तो हाँ, कचरा करने के लिए
मैट सीमन्स

1
के लिए wgetआप उपयोग कर सकते हैं -qबनाने के लिए विकल्प यह शांत।
पखमरे

सीधे / देव / tty को लिखे गए आउटपुट को दबाने का कोई तरीका?
d11wtq

30

कमांडलाइन पर तीन IO डिवाइस उपलब्ध हैं।

 standard in - 0 
 standard out - 1 
 standard error - 2 

किसी फ़ाइल (और फ़ाइल को अधिलेखित) के लिए मानक (डिफ़ॉल्ट आउटपुट) को पुनर्निर्देशित करने के लिए, उपयोग करें

 command > file.log 

File.log में संलग्न करने के लिए, 2> s का उपयोग करें

 command >> file.log

मानक त्रुटि को file.log पर पुनर्निर्देशित करें, उपयोग करें

 command 2> file.log

और संलग्न करने के लिए

 command 2>> file.log

आउटपुट को एक स्ट्रीम में संयोजित करने और उन सभी को एक स्थान पर भेजने के लिए

 command > file.log 2>&1 

यह 2 (stderr) को 1 (stdout) में भेजता है, और stdout को file.log में भेजता है

ध्यान दें कि स्टैण्ड की अपेक्षा एक कमांड में मानक को पुनर्निर्देशित करना भी संभव है

 command << file.txt 

EDIT
अधिक जानकारी के लिए, उन्नत बैश स्क्रिप्टिंग गाइड देखें


क्या कोई समझा सकता है कि कैसे command > file.log 2>&1काम करता है?
कोरी क्लेन

आप कितना निम्न स्तर जानना चाहेंगे?
मैट सिमंस

3
@nomoreink: यह वास्तव में 2 कमांड है, एक है > fileऔर दूसरा है 2>&1। पहले एक फ़ाइल में मानक को पुनर्निर्देशित करता है। दूसरा व्यक्ति 2 फ़ाइल डिस्क्रिप्टर लेता है और इसे पहले एक पर रीडायरेक्ट करता है। आप मानक त्रुटि का उपयोग करके रिवर्स, पुनर्निर्देशित मानक आउटपुट का उपयोग कर सकते हैं >&2और फिर एक फ़ाइल के लिए मानक त्रुटि को पुनर्निर्देशित कर सकते हैं 2> file
ह्यूबर्ट करियो

12

छिपाना stdout

./command >/dev/null

छिपाना stdoutऔरstderr

./command >/dev/null 2>&1

छिपाएँ stdoutऔर stderrरिलीज़ टर्मिनल (पृष्ठभूमि में कमांड चलाएँ)

./command >/dev/null 2>&1 &

3

यदि आप आउटपुट को छुपाना चाहते हैं (और इसे किसी फाइल में सेव नहीं करना चाहते), आप उपयोग कर सकते हैं:

संपादित:

$ कमांड और> / देव / अशक्त


यह आउटपुट को null
theotherreceive

यह एक अशक्त फ़ाइल उत्पन्न करता है
जादर डायस

1
आप मतलब नहीं होगा / देव / अशक्त, आप करेंगे?
बाबू

1
हाँ, मैं होता, बाबू। मेरा मतलब $ कमांड &> / dev / null है। अपने स्वयं के अच्छे के लिए बहुत तेजी से टाइप करने के लिए मेरी माफी।
लुचो

2

मैक ओएस एक्स (10.6 "स्नो लेपर्ड") के लिए:

यदि आपको प्रोग्राम को जाने बिना आउटपुट को छुपाने की आवश्यकता है, तो आउटपुट / एरर फाइल डिस्क्रिप्टर की जाँच करके आप इसे शेल में निम्न का उपयोग करके देख सकते हैं:

stty flusho; command ;stty -flusho

या यदि आप टर्मिनल से इनपुट छिपाना चाहते हैं, तो:

stty  -echo; command ;stty  echo

अधिक जानकारी के लिए स्टटी (1) मैनुअल पेज देखें

लिनक्स के लिए मुझे पता है कि उबुनुतु (10.04 "ल्यूसिड") और कुछ "डेबियन / आर्क" (नीचे टिप्पणी की गई - tnx hendry) की flushoसेटिंग नहीं है (और मैं मैन-पेज में कुछ और उपयुक्त नहीं देख सकता) । echoसेटिंग वैसे भी Ubuntu पर काम करता है।


डेबियन / आर्क के तहत मेरे डिफ़ॉल्ट स्टेंट में ये विकल्प नहीं हैं।
Hendry

मुझे निश्चित रूप से उल्लेख करना चाहिए कि मैं ओपी के ओएस पर भी नहीं था। मेरी पोस्ट संपादित की।
vike
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.