मैं मान रहा हूं कि आप अभी भी टर्मिनल पर STDERR और STDOUT देखना चाहते हैं। आप जोश केली के जवाब के लिए जा सकते हैं, लेकिन मुझे लगता tailहै कि बैकग्राउंड में जो कि आपके लॉग फाइल को बहुत ही हैकिश और क्लूडी के आउटपुट देता है। ध्यान दें कि आपको एक्सरा एफडी रखने की आवश्यकता है और इसे मारने के बाद सफाई करें और तकनीकी रूप से ऐसा करना चाहिए trap '...' EXIT।
ऐसा करने का एक बेहतर तरीका है, और आप इसे पहले ही खोज चुके हैं tee:।
केवल, अपने स्टडआउट के लिए इसका उपयोग करने के बजाय, स्टडआउट के लिए टी और स्टडर के लिए एक है। आप इसे कैसे पूरा करेंगे? प्रक्रिया प्रतिस्थापन और फ़ाइल पुनर्निर्देशन:
command > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2)
आइए इसे अलग करें और समझाएं:
> >(..)
>(...)(प्रक्रिया प्रतिस्थापन) एक फीफो बनाता है और teeउस पर सुनने देता है। फिर, यह FIFO >के STDOUT को पुनर्निर्देशित करने के लिए (फ़ाइल पुनर्निर्देशन) का उपयोग करता है commandजिसे आपका पहला teeसुन रहा है।
दूसरी के लिए एक ही बात:
2> >(tee -a stderr.log >&2)
हम teeएसटीडीआईएन से पढ़ी जाने वाली प्रक्रिया को बनाने के लिए फिर से प्रक्रिया प्रतिस्थापन का उपयोग करते हैं और इसमें डंप करते हैं stderr.log। teeSTDOUT पर इसके इनपुट को वापस आउटपुट करता है, लेकिन चूंकि इसका इनपुट हमारा STDERR है, इसलिए हम teeअपने STDERR के बारे में फिर से अप्रत्यक्ष करना चाहते हैं। फिर हम फ़ाइल पुनर्निर्देशन का उपयोग commandFIFO के इनपुट ( tee'STDIN) में' STDERR ' को पुनर्निर्देशित करते हैं ।
Http://mywiki.wooledge.org/BashGuide/InputAndOutput देखें
प्रक्रिया प्रतिस्थापन उन बहुत ही प्यारी चीजों में से एक है जो आपको bashअपने शेल के रूप में चुनने के बोनस के रूप में मिलती है sh(पोसिक्स या बॉर्न) के विपरीत ।
में sh, आपको चीजों को मैन्युअल रूप से करना होगा:
out="${TMPDIR:-/tmp}/out.$$" err="${TMPDIR:-/tmp}/err.$$"
mkfifo "$out" "$err"
trap 'rm "$out" "$err"' EXIT
tee -a stdout.log < "$out" &
tee -a stderr.log < "$err" >&2 &
command >"$out" 2>"$err"