जवाबों:
एक (कई में से) समाधान निम्नलिखित हैं:
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
रीडायरेक्ट STDERR को उसी fd (फाइल डिस्क्रिप्टर) पर रीडायरेक्ट करता है जहां STDOUT currently
जाता है। यह इसे STDOUT पर पुनर्निर्देशित नहीं कर रहा है। यदि आप STDOUT ( 1>logfile
), STDERR को प्रभावित नहीं करेंगे, तो यह अभी भी उसी fd की ओर इशारा करेगा। पुनर्निर्देशन करने का क्रम महत्वपूर्ण है।
command 2> >(tee -a logfile) 1>>logfile
- stderr को एक प्रक्रिया प्रतिस्थापन में पुनर्निर्देशित किया जाता है, और टी stdout को लिखता है। आपके उत्तर पर कोई वास्तविक लाभ नहीं।
2>&1
2 से 1 को "अटैच" नहीं करता, लेकिन उस समय जो कुछ भी इशारा कर रहा था , उसमें 2 को जोड़ देता है ...?
2>&1
,1
सब कुछ रखती है, कोई फर्क नहीं पड़ता कि आपका पुनर्निर्देशन1
बाद में कहां है , एसटीडीआरआर एक साथ जाता है।