স্ট্যান্ডার স্ক্রিনে লিখতে এবং উভয় স্ট্যাডার লিখতে এবং একটি ফাইলে স্টাডআউট লিখতে - এবং স্টার্ডার এবং স্টাডআউটের জন্য লাইনগুলি একই ক্রমে বেরিয়ে আসতে হবে যদি তারা উভয়ই পর্দায় লিখিত হয়:
একটি কঠিন সমস্যা হিসাবে পরিণত হয়েছে, বিশেষত "একই ক্রম" থাকা সম্পর্কে আপনি যে অংশটি আশা করবেন তা যদি আপনি কেবল স্ক্রিনে লিখে থাকেন। সহজ শর্তে: প্রত্যেককে তার নিজের ফাইলে লিখুন, লাইনটি তৈরি হওয়ার সঠিক সময়টি সহ প্রতিটি লাইন চিহ্নিত করতে কিছু পটভূমি-প্রক্রিয়া যাদু করুন (এবং প্রতিটি ফাইলের মধ্যে) এবং তারপরে: "লেজ - ফলো" স্ট্যাডার ফাইলটি স্ক্রিনে রেখে দিন , তবে উভয় "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
ক্রমটি স্ট্যান্ডআউট এবং স্টেডার উভয়ই পর্দায় চলে যাওয়ায় এটি অন্তত খুব কাছাকাছি হওয়ার একমাত্র কারণ: প্রতিটি একক লাইনটি মিলিসেকেন্ডে টাইমস্ট্যাম্প সহ চিহ্নিত করা হয় with
প্রক্রিয়াটি চলার সাথে সাথে স্ক্রিনারে স্টার্ডার দেখতে এটি ব্যবহার করুন:
tail -f $pth/$ffn.out
আশা করি এটি কাউকে সাহায্য করবে, যিনি আসল প্রশ্ন জিজ্ঞাসা করার অনেক পরে এখানে এসেছিলেন।