STDERR को फाइल और कंसोल और STDOUT दोनों में ही रीडायरेक्ट कैसे करें


3

मैं जो हासिल करना चाहता हूं वह सामान्य संदेश और त्रुटि संदेश दोनों को एक फ़ाइल में पुनर्निर्देशित करता है। लेकिन कंसोल के लिए त्रुटि संदेश भी प्रिंट करें (केवल त्रुटि संदेश)।

जवाबों:


4

एक (कई में से) समाधान निम्नलिखित हैं:

command 2>&1 1>logfile | tee -a logfile

चाभी:

`2>&1` redirect the output of STDERR to STDOUT
`1>logfile` redirect STDOUT (note: leaves STDERR unchanged)
`| tee -a logfile` append the redirected STDERR to the logfile

अधिक जानकारी के लिए, बैश हैकर्स विकी देखें


इससे पहले कि मैं पुनर्निर्देशित करने के बाद सोचता हूं 2>&1, 1सब कुछ रखती है, कोई फर्क नहीं पड़ता कि आपका पुनर्निर्देशन 1बाद में कहां है , एसटीडीआरआर एक साथ जाता है।
चेज एन

3
@EnzoChi 2>&1रीडायरेक्ट STDERR को उसी fd (फाइल डिस्क्रिप्टर) पर रीडायरेक्ट करता है जहां STDOUT currentlyजाता है। यह इसे STDOUT पर पुनर्निर्देशित नहीं कर रहा है। यदि आप STDOUT ( 1>logfile), STDERR को प्रभावित नहीं करेंगे, तो यह अभी भी उसी fd की ओर इशारा करेगा। पुनर्निर्देशन करने का क्रम महत्वपूर्ण है।
NZD

1
थोड़ा छोटा किया जा सकता है: command 2> >(tee -a logfile) 1>>logfile- stderr को एक प्रक्रिया प्रतिस्थापन में पुनर्निर्देशित किया जाता है, और टी stdout को लिखता है। आपके उत्तर पर कोई वास्तविक लाभ नहीं।
ग्लेन जैकमैन

1
इसलिए, 1 और 2 केवल संकेत हैं, एक प्रोग्राम के stdout और stderr संदेश लेते हैं और आम तौर पर उन्हें टर्मिनल / स्क्रीन पर डालते हैं, जब तक कि बदल / पुनर्निर्देशित / पाइप नहीं किया जाता है। बनाना 2>&12 से 1 को "अटैच" नहीं करता, लेकिन उस समय जो कुछ भी इशारा कर रहा था , उसमें 2 को जोड़ देता है ...?
Xen2050

@ Xen2050 यह सही है :-) अधिक जानकारी के लिए wiki.bash-hackers.org/howto/redirection_tutorial
NZD
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.