मुझे डेनिस का काम करने के लिए बहुत सरल वन-लाइनर नहीं मिला, इसलिए यहां बहुत अधिक जटिल विधि है। मैं उसकी पहली कोशिश करूँगा।
जैसा कि उल्लेख किया गया है, आप संपूर्ण स्क्रिप्ट के लिए मानक त्रुटि और मानक को पुनर्निर्देशित करने के लिए निष्पादन का उपयोग कर सकते हैं। जैसे:
exec > $LOGFILE 2>&1
यह सभी स्टीडर और स्टडआउट को $ लोगीमर में आउटपुट करेगा।
अब, चूंकि आप इसे कंसोल के साथ-साथ लॉगफ़ाइल में भी प्रदर्शित करना चाहते हैं, इसलिए आपको लिखने के लिए निष्पादन के लिए नामित पाइप, और पढ़ने के लिए टी का उपयोग करना होगा।
(डेनिस का वन-लाइनर तकनीकी रूप से भी ऐसा करता है, हालांकि स्पष्ट रूप से एक अलग तरीके से) पाइप खुद के साथ बनाया गया है mkfifo $PIPEFILE
। फिर निम्नलिखित करें।
# टी लॉग लिखना शुरू करें, लेकिन हमारे नामित पाइप से इसके इनपुट को खींचते हुए।
$ $ लोगो <$ PIPEFILE &
# वेट कमांड के लिए टी की प्रक्रिया आईडी पर कब्जा।
TEEPID = $!
# हमारे नामित पाइप के लिए बाकी स्टडर और स्टडआउट को पुनर्निर्देशित करें।
निष्पादित> $ PIPEFILE 2> और 1
इको "अपनी आज्ञा यहाँ बनाएँ"
गूंज "उनके सभी मानक बाहर हो जाएंगे।"
इको "तो उनकी मानक त्रुटि होगी"> और 2
# stderr और stdout फ़ाइल डिस्क्रिप्टर को बंद करें।
1> & - 2> & - निष्पादित करें
# टी के खत्म होने का इंतजार करें क्योंकि अब पाइप का दूसरा छोर बंद हो चुका है।
$ TEEPID की प्रतीक्षा करें
यदि आप पूरी तरह से बनना चाहते हैं, तो आप अपनी स्क्रिप्ट के आरंभ और अंत में नामित पाइप फ़ाइल बना और नष्ट कर सकते हैं।
रिकॉर्ड के लिए, मैंने एक यादृच्छिक व्यक्ति के बहुत जानकारीपूर्ण ब्लॉग पोस्ट से इस पर प्रकाश डाला: ( संग्रहीत संस्करण )