2010-03-12 17 views
8

मैं एक bash स्क्रिप्ट लिख रहा हूँ और एक कमांड मैं एक एकल फाइल करने के लिए चलाए की stdout और stderr उत्पादन रीडायरेक्ट करना होगा, stderr या stdout साथ प्रत्येक पंक्ति लगाकर, तदनुसार के साथ एक एकल फाइल करने के लिए stderr।रीडायरेक्ट stdout और उपसर्गों

क्या ऐसा करने का कोई आसान तरीका है?

उत्तर

11

annotate-output, Debian के devscripts से, यह करता है।

अपने आदमी पृष्ठ में उदाहरण:

 
$ annotate-output make 
21:41:21 I: Started make 
21:41:21 O: gcc -Wall program.c 
21:43:18 E: program.c: Couldn't compile, and took me ages to find out 
21:43:19 E: collect2: ld returned 1 exit status 
21:43:19 E: make: *** [all] Error 1 
21:43:19 I: Finished with exitcode 2 
+1

ने यह उत्तर चुना क्योंकि यह आदेश को सुरक्षित रखने में बेहतर है, हालांकि आपको हर समय आउटपुट को फ़्लश करना होगा ... –

10

इस प्रयास करें:

(myCommand | sed s/^/stdout:/ >> myLogfile) 2>&1 | sed s/^/stderr:/ >> myLogFile 

पहले पाइप myCommand के मानक आउटपुट में एक stdout: उपसर्ग सम्मिलित करता है और myLogFile करने के लिए इसे जोड़ देता है।

ब्रांड्स का उपयोग उन सभी का एक कमांड बनाने के लिए किया जाता है। वे बताते हैं कि आगे की रीडायरेक्शन अंदरूनी संश्लेषण के लिए लागू होती है और न केवल sed पर।

फिर मानक त्रुटि 2>&1 के साथ मानक आउटपुट पर रीडायरेक्ट की जाती है (याद रखें कि मूल मानक आउटपुट को myLogFile पर रीडायरेक्ट कर दिया गया है)। दूसरा पाइप stderr: उपसर्ग को सम्मिलित करता है और इसे myLogFile में जोड़ता है।

+0

मैं इस दिशा में मेरे रास्ते तलाशने गया था, लेकिन तुम्हारा अधिक स्वच्छ है। –

+0

क्या आप उस उत्तर पर विस्तार कर सकते हैं? मुझे लगता है कि मैं इसे समझता हूं, कोष्ठक को छोड़कर ... –

+0

सुविधा के लिए, '2> और 1 |' को बैश 4 या zsh में '| &' के रूप में लिखा जा सकता है। यह '>> फ़ाइल' या'> और फ़ाइल' के लिए कुछ हद तक सममित है जो '> फ़ाइल 2> और 1' के लिए शॉर्टकट हैं। – ephemient

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