बैश स्क्रिप्ट में,फ़ाइल लॉग करने के लिए stderr और tee गूंज?
गूंज "त्रुटि" 1> & 2 | टीई-ए लॉग
स्क्रीन में stderr प्रिंट करेगा लेकिन फाइल करने के लिए कोई लॉग नहीं होगा, एक ही समय में इन्हें कैसे करें?
बैश स्क्रिप्ट में,फ़ाइल लॉग करने के लिए stderr और tee गूंज?
गूंज "त्रुटि" 1> & 2 | टीई-ए लॉग
स्क्रीन में stderr प्रिंट करेगा लेकिन फाइल करने के लिए कोई लॉग नहीं होगा, एक ही समय में इन्हें कैसे करें?
, दोनों लॉग फ़ाइल और stderr के लिए पाठ गूंज के लिए लेकिन stdout नहीं, इसे आजमाएं:
echo "error" | tee -a log 1>&2
लेकिन डिफ़ॉल्ट केवल stdout, पाइप में पारित ताकि
$ echo "error" | tee
tee
में केवल echo
से मोटा, नहीं stderr देखता है। stderr अभी भी टर्मिनल में प्रदर्शित किया जाएगा।
echo "error" 1>&2 | tee -a log
पहले भाग
1>&2
साथ
, तुम क्या कह रहे है: "stderr करने के लिए stdout पुन: निर्देशित"। तो प्रतिबिंबित आउटपुट "error"
stderr पर जाता है।
पाइप (|
) केवल stdout
से पढ़ता है, stderr
नहीं। तो tee
पाइप से सभी stdin
नहीं मिलता है। इसलिए, यह लॉग फ़ाइल में कुछ भी नहीं जोड़ता है।
+1। समाधान के अलावा, बहुत अच्छा जवाब: इस उद्देश्य के लिए सही के रूप में '2> और 1' का उल्लेख करना उचित हो सकता है। – glglgl
हाँ, आईसी। लेकिन stderr को गूंजने और फ़ाइल में त्रुटि लॉग लिखने के लिए कैसे? – timy
@timy अगर आप * stderr को stdout पर रीडायरेक्ट करते हैं तो आप यह कर सकते हैं: 'echo "त्रुटि" 2> और 1 | टी-ए लॉग '। अब दोनों stderr stdout पर भी जाएंगे और आप स्क्रीन पर दोनों देख सकते हैं और लॉग में भी शामिल होंगे। –
दोनों stdout और कंसोल पर stderr को देखने के लिए और एक लॉग करने के लिए दोनों धाराओं भेजने के लिए, stdout को stderr अनुप्रेषित जिन्हें आप नीचे देख:
progam.sh 2>&1 | tee -a log
मैं 100% निश्चित नहीं हूं कि ओपी क्या करना चाहता था, लेकिन यह मेरे अपने मामले के लिए अब तक का सबसे अच्छा समाधान है। मुझे लगता है कि समस्या यह है कि यह सोचना आसान है कि पुनर्निर्देशन को 'इको' पर लागू किया जाना चाहिए, लेकिन इसे 'टीई' कमांड में करना पूरी तरह से काम करता है, धन्यवाद! – Haravikk