linux - सभी आउटपुट को फ़ाइल में डुप्लिकेट करें




bash io-redirection (7)

Osexp2003 और जेए के लिए क्रेडिट ...

डालने के बजाय

&>> your_file.log

एक लाइन के पीछे

crontab -e

मैं उपयोग करता हूं

#!/bin/bash
exec &>> your_file.log
…

एक बाश लिपि की शुरुआत में।

लाभ: आपकी स्क्रिप्ट के भीतर लॉग परिभाषाएं हैं। गिट इत्यादि के लिए अच्छा

मुझे पता है कि लिनक्स में, स्क्रीन से आउटपुट को एक फ़ाइल में रीडायरेक्ट करने के लिए, मैं या तो > या tee उपयोग कर सकता हूं। हालांकि, मुझे यकीन नहीं है कि आउटपुट का हिस्सा अभी भी स्क्रीन पर आउटपुट क्यों है और फ़ाइल में नहीं लिखा गया है।

क्या सभी आउटपुट को फाइल में रीडायरेक्ट करने का कोई तरीका है?


आप बाद में किसी भी आदेश के सभी stdout / stderr आउटपुट को पुनर्निर्देशित करने के लिए exec कमांड का उपयोग कर सकते हैं।

नमूना स्क्रिप्ट:

exec 2> your_file2 > your_file1
your other commands.....

कंसोल पर आउटपुट प्राप्त करने के लिए और उदाहरण के लिए फ़ाइल file.txt

make 2>&1 | tee file.txt

नोट: & ( 2>&1 ) निर्दिष्ट करता है कि 1 फ़ाइल नाम नहीं है बल्कि फ़ाइल डिस्क्रिप्टर है।


कमान:

foo >> output.txt 2>&1

सामग्री को प्रतिस्थापित किए बिना output.txt फ़ाइल में जोड़ता है।


लिनक्स मिंट में, यह कमांड स्ट्रिंग निष्पादित स्क्रिप्ट और एक txt फ़ाइल में त्रुटियों को रूट करता है। bash -x ./setup.sh > setup.txt 2>&1 । स्क्रिप्ट नाम setup.sh था और आउटपुट गंतव्य setup.txt था।


वह हिस्सा stderr पर लिखा गया है, इसे पुनर्निर्देशित करने के लिए 2> का उपयोग करें। उदाहरण के लिए:

foo > stdout.txt 2> stderr.txt

या यदि आप एक ही फाइल में चाहते हैं:

foo > allout.txt 2>&1

नोट: यह (बीए) sh में काम करता है, उचित सिंटैक्स के लिए अपना खोल जांचें


सभी POSIX ऑपरेटिंग सिस्टम में 3 स्ट्रीम हैं : stdin, stdout, और stderr। stdin इनपुट है, जो stdout या stderr स्वीकार कर सकते हैं। stdout प्राथमिक आउटपुट है, जिसे > , >> , या | साथ पुनर्निर्देशित किया जाता है । stderr त्रुटि आउटपुट है, जिसे अलग से संभाला जाता है ताकि किसी भी अपवाद को कमांड में पास नहीं किया जा सके या फ़ाइल में लिखा जा सके जो इसे तोड़ सकता है; आमतौर पर, यह किसी प्रकार के लॉग पर भेजा जाता है, या सीधे डंप किया जाता है, भले ही stdout रीडायरेक्ट किया जाता है। दोनों को एक ही स्थान पर रीडायरेक्ट करने के लिए, उपयोग करें:

command &> /some/file

संपादित करें : जैक को यह इंगित करने के लिए धन्यवाद कि उपर्युक्त समाधान पोर्टेबल नहीं है - इसके बजाय उपयोग करें:

*command* > file 2>&1 

अगर आप त्रुटि को चुप करना चाहते हैं, तो करें:

*command* 2> /dev/null





io-redirection