आइए >> /dev/null 2>&1
बयान को भागों में तोड़ते हैं :
भाग 1: >>
आउटपुट पुनर्निर्देशन
इसका उपयोग प्रोग्राम आउटपुट को रीडायरेक्ट करने और आउटपुट को फ़ाइल के अंत में जोड़ने के लिए किया जाता है। अधिक...
भाग 2: /dev/null
विशेष फ़ाइल
यह एक छद्म-उपकरण विशेष फ़ाइल है ।
कमांड ls -l /dev/null
आपको इस फाइल का विवरण देगा:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
आपने अवलोकन किया crw
? जिसका अर्थ है कि यह एक छद्म डिवाइस फ़ाइल है जो कि चरित्र-विशेष-फ़ाइल प्रकार की है जो सीरियल एक्सेस प्रदान करती है।
/dev/null
सभी इनपुट स्वीकार करता है और डिस्क्राइब करता है; कोई आउटपुट नहीं देता (हमेशा एक रीड पर एक एंड-ऑफ़-फ़ाइल संकेत देता है)। संदर्भ: विकिपीडिया
भाग 3: 2>&1
फ़ाइल विवरणक
जब भी आप किसी प्रोग्राम को निष्पादित करते हैं, ऑपरेटिंग सिस्टम हमेशा तीन फाइलें खोलता है, मानक इनपुट, मानक आउटपुट, और मानक त्रुटि जब हम जानते हैं कि जब भी कोई फ़ाइल खोली जाती है, तो ऑपरेटिंग सिस्टम ( कर्नेल से ) एक गैर-नकारात्मक पूर्णांक देता है जिसे फ़ाइल विवरणक कहा जाता है । इन फ़ाइलों के लिए फ़ाइल डिस्क्रिप्टर क्रमशः 0, 1, और 2 हैं।
तो 2>&1
बस मानक उत्पादन में मानक त्रुटि को पुनर्निर्देशित कहते हैं।
&
इसका मतलब है कि जो कुछ भी है वह फाइल डिस्क्रिप्टर है, फ़ाइल नाम नहीं।
संक्षेप में, इस कमांड का उपयोग करके आप अपने प्रोग्राम को निष्पादित करते समय चिल्लाने के लिए नहीं कह रहे हैं।
उपयोग करने का महत्व क्या है 2>&1
?
यदि आप किसी भी आउटपुट का उत्पादन नहीं करना चाहते हैं, यहां तक कि टर्मिनल में उत्पन्न कुछ त्रुटि के मामले में भी। अधिक स्पष्ट रूप से समझाने के लिए, आइए निम्न उदाहरण पर विचार करें:
$ ls -l > /dev/null
उपरोक्त कमांड के लिए, टर्मिनल में कोई आउटपुट प्रिंट नहीं किया गया था, लेकिन क्या होगा यदि यह कमांड एक त्रुटि उत्पन्न करता है:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
आउटपुट को रीडायरेक्ट करने के बावजूद /dev/null
, इसे टर्मिनल में प्रिंट किया जाता है। यह इसलिए है क्योंकि हम त्रुटि आउटपुट को रीडायरेक्ट नहीं कर रहे हैं /dev/null
, इसलिए त्रुटि आउटपुट को भी रीडायरेक्ट करने के लिए, इसे जोड़ना आवश्यक है 2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
।