यूनिक्स जैसी प्रणालियों में, दो आउटपुट पथ होते हैं जो यदि छोड़ दिए जाते हैं तो अनमॉडिफाइड आपकी स्क्रीन पर आउटपुट भेजेंगे। मानक त्रुटि (या stderr) वह है जो अधिकांश विफलताओं और त्रुटि स्थितियों को पकड़ती है।
"नियमित आउटपुट" के रूप में एक ही आउटपुट स्ट्रीम में stderr में अनुमति अस्वीकृत संदेश को पास करने के लिए आपको दोनों को संयोजित करना होगा। आपके उदाहरण में, आपके grep -v
द्वारा उस पर ठीक से काम करने के लिए , आप स्टैडआउट (मानक आउटपुट) और स्टेंडर को आपके द्वारा देखे जाने वाले आर्कियन सिंटैक्स के साथ जोड़ते हैं।
से जीएनयू बैश मैनुअल खंड 3.2.2 पाइपलाइन :
यदि ' |&
' का उपयोग किया जाता है, तो कमांड मानक मानक त्रुटि, इसके मानक आउटपुट के अलावा, पाइप के माध्यम से कमांड 2 के मानक इनपुट से जुड़ा है ; इसके लिए आशुलिपि है 2>&1 |
। मानक आउटपुट में मानक त्रुटि का यह निहित पुनर्निर्देशन कमांड द्वारा निर्दिष्ट किसी भी पुनर्निर्देशन के बाद किया जाता है।
इसके अलावा, जैसा कि जिरहा बताते हैं, अगर आप सिर्फ स्टैडर आउटपुट से छुटकारा चाहते हैं, तो आप कुछ ऐसा करना चाहेंगे
find -name 'myfile.*' 2> /dev/null
या शायद
find -name 'myfile.*' 2> /tmp/errorlog
और ध्यान दें कि यदि आपके पास कमांड्स के तार हैं, जैसे कि find
इसका आउटपुट xargs
आपको पास करने के लिए कमांड के सभी घटकों से आउटपुट कैप्चर करने के लिए कोष्ठक में कमांडों की पूरी पाइपलाइन डालने की आवश्यकता होगी। उदाहरण के लिए,
(find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 ) 2> /dev/null
यदि आपने कोष्ठक को छोड़ दिया, और इसके बजाय यह किया -
find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 2> /dev/null
आप अभी भी खोज या egrep से अनुमति से वंचित त्रुटियों को देखेंगे, लेकिन स्टैडर को xargs के लिए पुनर्निर्देशित किया जाएगा।
जैसा कि आपने देखा है, आप टेस्ट रन के दौरान इसकी सामग्री को देखने के बाद ही stderr को फेंक देंगे।
ध्यान दें कि GNU के साथ find
और जहाँ तक मैं बता सकता हूँ, कोई भी POSIX- शिकायत find
, -print
विकल्प निहित है। यदि आप चाहें तो आप अभी भी इसे स्पष्ट रूप से आपूर्ति कर सकते हैं।