कुछ समय पहले मैंने एक स्क्रिप्ट बनाई और मैंने उसके चारों ओर कुछ लॉगिंग जोड़ दी, लेकिन मैं भूल गया कि लॉगिंग के लिए पुनर्निर्देशन कैसे किया जाता है :-(
इसका सार यह है:
#!/bin/bash
LOGFILE=/some/path/mylogfile
(
# here go my commands which produce some stdout
# and, if something goes wrong, also some stderr
) 1>>${LOGFILE} 2> >( tee -a ${LOGFILE} >&2 )
जब मैं स्क्रिप्ट चलाता हूं, तो यह कुछ भी प्रिंट नहीं करता है stdout
, लेकिन केवल प्रिंट करता है कि क्या होता है stderr
। Logfile ${LOGFILE}
stdout और stderr दोनों को कैप्चर करता है।
जब मैं स्क्रिप्ट चलाता हूं और मेरे टर्मिनल पर कोई आउटपुट नहीं है, तो मुझे पता है कि सब कुछ ठीक है। यदि कोई आउटपुट है, तो मुझे पता है कि कुछ गलत हो गया है और मैं लॉगफाइल की जांच कर पता लगा सकता हूं कि समस्या क्या है।
पुनर्निर्देशन का वह हिस्सा जो अब मुझे पहेली बना रहा है: 2> >( some command )
क्या कोई समझा सकता है कि वहां क्या चल रहा है?
echo <(date)
, तो यह मुझे प्रतिस्थापित फ़ाइल का नाम देता है/dev/fd/63
:। अगर मैं निष्पादित करता हूंcat <(date)
, तो यह मुझे तारीख, यानी प्रतिस्थापित फ़ाइल की सामग्री देता हैFri Nov 18 14:11:09 NZDT 2016
:।