स्क्रीन पर Stderr लिखने के लिए और BOTH stderr और stdout को एक फ़ाइल में लिखने के लिए - और उसके पास stderr और stdout के लिए लाइनें हैं, उसी क्रम में वे दोनों स्क्रीन पर लिखे गए थे:
एक मुश्किल समस्या बन जाती है, विशेष रूप से "एक ही अनुक्रम" होने के बारे में हिस्सा अगर आप बस उन्हें स्क्रीन पर लिखेंगे, तो आप उम्मीद करेंगे। सरल शब्दों में: प्रत्येक को अपनी फ़ाइल में लिखें, प्रत्येक पृष्ठभूमि (प्रत्येक फ़ाइल में) को चिह्नित करने के लिए कुछ पृष्ठभूमि-प्रक्रिया जादू करें जो सटीक समय पर लाइन का उत्पादन किया गया था, और फिर: स्क्रीन पर stderr फ़ाइल को "पूंछ - फाइल" करें , लेकिन BOTH "stderr" और "stdout" को एक साथ देखने के लिए - अनुक्रम में - दो फ़ाइलों को क्रमबद्ध करें (प्रत्येक पंक्ति पर सटीक-समय के निशान के साथ)।
कोड:
# Set the location of output and the "first name" of the log file(s)
pth=$HOME
ffn=my_log_filename_with_no_extension
date >>$pth/$ffn.out
date >>$pth/$ffn.err
# Start background processes to handle 2 files, by rewriting each one line-by-line as each line is added, putting a label at front of line
tail -f $pth/$ffn.out | perl -nle 'use Time::HiRes qw(time);print substr(time."0000",0,16)."|1|".$_' >>$pth/$ffn.out.txt &
tail -f $pth/$ffn.err | perl -nle 'use Time::HiRes qw(time);print substr(time."0000",0,16)."|2|".$_' >>$pth/$ffn.err.txt &
sleep 1
# Remember the process id of each of 2 background processes
export idout=`ps -ef | grep "tail -f $pth/$ffn.out" | grep -v 'grep' | perl -pe 's/\s+/\t/g' | cut -f2`
export iderr=`ps -ef | grep "tail -f $pth/$ffn.err" | grep -v 'grep' | perl -pe 's/\s+/\t/g' | cut -f2`
# Run the command, sending stdout to one file, and stderr to a 2nd file
bash mycommand.sh 1>>$pth/$ffn.out 2>>$pth/$ffn.err
# Remember the exit code of the command
myexit=$?
# Kill the two background processes
ps -ef | perl -lne 'print if m/^\S+\s+$ENV{"idout"}/'
echo kill $idout
kill $idout
ps -ef | perl -lne 'print if m/^\S+\s+$ENV{"iderr"}/'
echo kill $iderr
kill $iderr
date
echo "Exit code: $myexit for '$listname', list item# '$ix', bookcode '$bookcode'"
हां, यह विस्तृत लगता है, और इसका परिणाम 4 आउटपुट फाइलों में से है (जिनमें से 2 आप हटा सकते हैं)। ऐसा लगता है कि यह हल करने के लिए एक कठिन समस्या है, इसलिए इसने कई तंत्रों को लिया।
अंत में, बीओटीएच स्टडआउट और स्टेडर से परिणाम देखने के लिए जिस क्रम की आप अपेक्षा करेंगे, वह इस प्रकार है:
cat $pth/$ffn.out.txt $pth/$ffn.err.txt | sort
केवल यही कारण है कि अनुक्रम कम से कम बहुत करीब है जो कि यह दोनों stdout होता है और Stderr बस स्क्रीन पर चला गया है: हर एक पंक्ति को टाइमस्टैम्प के साथ मिलीसेकंड तक चिह्नित किया जाता है।
इस प्रक्रिया के साथ स्क्रीन पर स्टडर देखने के लिए, इसका उपयोग करें:
tail -f $pth/$ffn.out
आशा है कि किसी को बाहर लाने में मदद करता है, जो मूल प्रश्न पूछे जाने के लंबे समय बाद यहां पहुंचे।