2012-11-13 17 views

उत्तर

9

, दोनों लॉग फ़ाइल और stderr के लिए पाठ गूंज के लिए लेकिन stdout नहीं, इसे आजमाएं:

echo "error" | tee -a log 1>&2 
+0

मैं 100% निश्चित नहीं हूं कि ओपी क्या करना चाहता था, लेकिन यह मेरे अपने मामले के लिए अब तक का सबसे अच्छा समाधान है। मुझे लगता है कि समस्या यह है कि यह सोचना आसान है कि पुनर्निर्देशन को 'इको' पर लागू किया जाना चाहिए, लेकिन इसे 'टीई' कमांड में करना पूरी तरह से काम करता है, धन्यवाद! – Haravikk

0

लेकिन डिफ़ॉल्ट केवल stdout, पाइप में पारित ताकि

$ echo "error" | tee 

tee में केवल echo से मोटा, नहीं stderr देखता है। stderr अभी भी टर्मिनल में प्रदर्शित किया जाएगा।

8
echo "error" 1>&2 | tee -a log 
पहले भाग 1>&2 साथ

, तुम क्या कह रहे है: "stderr करने के लिए stdout पुन: निर्देशित"। तो प्रतिबिंबित आउटपुट "error" stderr पर जाता है।

पाइप (|) केवल stdout से पढ़ता है, stderr नहीं। तो tee पाइप से सभी stdin नहीं मिलता है। इसलिए, यह लॉग फ़ाइल में कुछ भी नहीं जोड़ता है।

+3

+1। समाधान के अलावा, बहुत अच्छा जवाब: इस उद्देश्य के लिए सही के रूप में '2> और 1' का उल्लेख करना उचित हो सकता है। – glglgl

+0

हाँ, आईसी। लेकिन stderr को गूंजने और फ़ाइल में त्रुटि लॉग लिखने के लिए कैसे? – timy

+0

@timy अगर आप * stderr को stdout पर रीडायरेक्ट करते हैं तो आप यह कर सकते हैं: 'echo "त्रुटि" 2> और 1 | टी-ए लॉग '। अब दोनों stderr stdout पर भी जाएंगे और आप स्क्रीन पर दोनों देख सकते हैं और लॉग में भी शामिल होंगे। –

5

दोनों stdout और कंसोल पर stderr को देखने के लिए और एक लॉग करने के लिए दोनों धाराओं भेजने के लिए, stdout को stderr अनुप्रेषित जिन्हें आप नीचे देख:

progam.sh 2>&1 | tee -a log 
संबंधित मुद्दे