2008-11-25 18 views
10

में जावैक आउटपुट कैप्चर करने का प्रयास कर रहा हूं, मैं जावा कंपाइलर आउटपुट को फ़ाइल में रीडायरेक्ट करने का प्रयास कर रहा हूं। मैंने सोचा कि यह होना चाहिए था:बैश खोल

javac file.java > log.txt 

या कुछ और। इसके बजाय, मैं टर्मिनल पर सभी आउटपुट और log.txt में कुछ भी नहीं देखता हूं!

इसके अलावा, अगर मैं भी त्रुटियों प्रवेश करना चाहते हैं, मैं

javac file.java 2>&1 > log.txt 

करते हैं?

उत्तर

13
javac file.java 2> log.txt 

कारण आप एक के बजाय दो आउटपुट फ़ाइल वर्णनकर्ता होता है। सामान्य एक stdout है, जिसे आप रीडायरेक्ट कर सकते हैं> और इसका परिणाम आउटपुट आउटपुट के लिए किया जाना चाहिए। दूसरा, stderr, चेतावनी, त्रुटियों, वर्तमान स्थिति इत्यादि जैसे मानव पठनीय आउटपुट के लिए है, यह 2> के साथ रीडायरेक्ट किया गया है।

आपकी दूसरी पंक्ति, 2> & 1 का उपयोग करके, stderr से stdout को रीडायरेक्ट करता है और अंत में log.txt में stdout।

+0

मुझे लगता है कि रीडरिंग stderr मुझे आउटपुट देता है जो मुझे चाहिए। सब कुछ stderr में लॉग इन क्यों है और stdout में कुछ भी नहीं है? साथ ही, क्या आप मुझे बता सकते हैं कि javac file.java 2> & 1> log.txt काम नहीं करता है? – jcee14

+0

पुनर्निर्देशन बाएं से दाएं हैंडल किए जाते हैं। 2> और 1 उस स्थान पर stderr भेजता है जहां वर्तमान में stdout चल रहा है - टर्मिनल। फिर> log.txt stdout को log.txt पर भेजता है, जो मूल stdout पर stderr लेखन छोड़ देता है। यदि आपने> log.txt 2> & 1 लिखा है, तो सभी आउटपुट फ़ाइल पर जाएंगे। –

+0

यदि आपको पता था कि यह भी काम करता है तो आपको बोनस अंक प्राप्त होते हैं:> log.txt javac 2> और 1 file.java –

7

आप की कोशिश की

javac -Xstdout log.txt file.java 

यह stderr के बजाय एक लॉग फ़ाइल के लिए संकलक त्रुटियों भेज देंगे लो।

संबंधित मुद्दे