जब आप दौड़ते हैं:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
आप अनिवार्य रूप से केवल स्ट्रीम 1 (यानी stdout
) के आउटपुट को रीडायरेक्ट कर रहे हैं /dev/null
।
जब आप किसी प्रोग्राम के सामान्य निष्पादन द्वारा उत्पादित आउटपुट को पुनर्निर्देशित करना चाहते हैं तो यह ठीक है। हालाँकि, यदि आप सभी त्रुटियों, चेतावनियों या विफलताओं के कारण होने वाले आउटपुट को पुनर्निर्देशित करना चाहते हैं, तो आपको stderr
या मानक त्रुटि स्ट्रीम को भी पुनर्निर्देशित करना चाहिए /dev/null
।
इसे करने का एक तरीका यह है कि आप पुनर्निर्देशन ऑपरेटर को पुनर्निर्देशित करने की इच्छा की धारा की संख्या को इस तरह से प्रस्तुत कर रहे हैं >
:Command 2> /dev/null
इसलिए, आपका आदेश ऐसा दिखेगा:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
लेकिन, ध्यान दें कि हम पहले ही एक स्ट्रीम को पुनर्निर्देशित कर चुके हैं /dev/null
। क्यों नहीं बस उसी पुनर्निर्देशन पर सूअर का बच्चा? बैश हमें स्ट्रीम नंबर को निर्दिष्ट करने के लिए ऐसा करने की अनुमति देता है जिससे कि पुनर्निर्देशित किया जा सके। 2>&1
।
&
पुनर्निर्देशन ऑपरेटर के बाद चरित्र को नोटिस करें । यह शेल को बताता है कि आगे जो दिखाई देता है वह फ़ाइल नाम नहीं है, बल्कि आउटपुट स्ट्रीम के लिए एक पहचानकर्ता है।
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
पुनर्निर्देशन ऑपरेटरों के साथ सावधान रहें, उनका आदेश बहुत मायने रखता है। यदि आप गलत क्रम में अनुप्रेषित करना चाहते थे, तो आप अप्रत्याशित परिणामों के साथ समाप्त होंगे।
एक और तरीका जिसमें आप पूरी तरह से मौन प्राप्त कर सकते हैं, इस शॉर्टकट का उपयोग करने के लिए सभी आउटपुट स्ट्रीम को पुनर्निर्देशित कर रहा है /dev/null
: &>/dev/null
(या लॉग फ़ाइल के साथ रीडायरेक्ट &>/path/to/file.log
)।
इसलिए, अपनी कमांड इस प्रकार लिखें:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
यह है। तात्कालिक मदद के लिए आप सभी का धन्यवाद!