हालांकि इस प्रश्न का स्वीकृत उत्तर सही है, यह वास्तव में यह समझाने के लिए बहुत कुछ नहीं करता है कि यह क्यों काम करता है, और चूंकि वाक्यविन्यास तुरंत स्पष्ट नहीं है, मैंने यह जानने के लिए एक त्वरित Google किया कि वास्तव में क्या चल रहा था। इस उम्मीद में कि यह जानकारी दूसरों के लिए उपयोगी है, मैं इसे यहाँ पोस्ट कर रहा हूँ।
कमांड प्रॉम्प्ट से त्रुटि संदेश पुनर्निर्देशित करना: STDERR / STDOUT
सारांश
जब '>' प्रतीक का उपयोग करके किसी एप्लिकेशन से आउटपुट रीडायरेक्ट किया जाता है, तो त्रुटि संदेश अभी भी स्क्रीन पर प्रिंट होते हैं। ऐसा इसलिए है क्योंकि अक्सर त्रुटि संदेश मानक आउट स्ट्रीम के बजाय मानक त्रुटि स्ट्रीम में भेजे जाते हैं।
कंसोल (कमांड प्रॉम्प्ट) एप्लिकेशन या कमांड से आउटपुट को अक्सर दो अलग-अलग धाराओं में भेजा जाता है। नियमित आउटपुट मानक आउट (STDOUT) को भेजा जाता है और त्रुटि संदेश मानक त्रुटि (STDERR) को भेजे जाते हैं। जब आप ">" प्रतीक का उपयोग करके कंसोल आउटपुट को रीडायरेक्ट करते हैं, तो आप केवल STDOUT को रीडायरेक्ट कर रहे हैं। STDERR को पुनर्निर्देशित करने के लिए आपको पुनर्निर्देशन प्रतीक के लिए '2>' निर्दिष्ट करना होगा। यह दूसरी आउटपुट स्ट्रीम का चयन करता है जो STDERR है।
उदाहरण
कमांड dir file.xxx
(जहां file.xxx
मौजूद नहीं है) निम्न आउटपुट प्रदर्शित करेगा:
Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876
File Not Found
यदि आप आउटपुट का NUL
उपयोग करके डिवाइस पर रीडायरेक्ट करते हैं dir file.xxx > nul
, तो आपको आउटपुट का त्रुटि संदेश भाग दिखाई देगा, जैसे:
File Not Found
त्रुटि संदेश को केवल पुनर्निर्देशित करने के लिए NUL
, निम्न आदेश का उपयोग करें:
dir file.xxx 2> nul
या, आप आउटपुट को एक स्थान पर, और त्रुटियों को दूसरे पर पुनर्निर्देशित कर सकते हैं।
dir file.xxx > output.msg 2> output.err
आप "& 1" कमांड का उपयोग करके एकल फाइल में त्रुटियों और मानक आउटपुट को STDERR के लिए आउटपुट को STDOUT में रीडायरेक्ट कर सकते हैं और फिर किसी फाइल में STDOUT से आउटपुट भेज सकते हैं:
dir file.xxx 1> output.msg 2>&1