2010-02-04 11 views
5

मेरे पास एक बैट स्क्रिप्ट है जो एक बिंदु पर एक प्रक्रिया के stderr को stdout पर रीडायरेक्ट करता है, और उसके बाद इसे एक फ़ाइल में लिखता है।बैडर को stderr से stdout पर रीडायरेक्ट करना अजीब व्यवहार है

process.exe 2>&1 > file.txt 

हालांकि, इस फाइल करने के लिए stderr रीडायरेक्ट नहीं करता है (कारणों के लिए मैं नहीं समझ सकता): मैं इस तरह यह करने के लिए इस्तेमाल किया। जब मैंने लाइन को संशोधित किया:

process.exe > file.txt 2>&1 

पूरी बात काम करती है। क्या ये दो समकक्ष नहीं हैं?

उत्तर

8

पहला उदाहरण अनिवार्य रूप से करता है:

stderr = stdout; 
stdout = "file.txt"; 

तो, stderr अभी भी मूल stdout पर इंगित कर रहा है। आपकी दूसरी उदाहरण है:

stdout = "file.txt"; 
stderr = stdout; 

तो, दोनों stderr और stdout अब संदर्भ file.txt। यह कष्टप्रद सूक्ष्म है।

2

पुनर्निर्देशन 2>&1 कमांड लाइन के अंत में काम करता है। यह पहले पुनर्निर्देशन पैरामीटर के रूप में काम नहीं करेगा, पुनर्निर्देशन के अंत में एक फ़ाइल नाम और 2>&1 की आवश्यकता होती है। आप प्रभावी ढंग से stderr को पुनर्निर्देशित करने का प्रयास कर रहे हैं लेकिन stderr संदेशों को संग्रहीत करने के लिए कोई प्लेसहोल्डर नहीं है इसलिए यह विफल रहा। इस याद के लिए शॉर्टकट

 
executable > some_file 2>&1 

आशा इस मदद करता है, सादर, टॉम है।

1

वैसे, कारणों मैं पूरी तरह से समझ में नहीं आता के लिए, की तरह

process.exe > result.txt 2<&1 

एक थिंक भी

काम करने के लिए लगता है
संबंधित मुद्दे