আপনি যখন stdout এবং stderr উভয়ই একই ফাইলে পুনর্নির্দেশ করতে চান, আপনি এটি ব্যবহার করে command 1>file.txt 2>&1
বা এটি ব্যবহার করতে পারেন command &>file.txt
। তবে command 1>file.txt 2>file.txt
উপরোক্ত দুটি আদেশের চেয়ে আলাদা আচরণ কেন ?
নীচে একটি যাচাইকরণ আদেশ আছে।
$ cat redirect.sh
#!/bin/bash
{ echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file.txt 2>&1
{ echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file1.txt 2>file1.txt
{ echo -e "error" 1>&2 && echo -e "output\noutput"; } 1>file2.txt 2>file2.txt
{ echo -e "output" && echo -e "error\nerror" 1>&2; } 1>file3.txt 2>file3.txt
{ echo -e "error\nerror" 1>&2 && echo -e "output"; } 1>file4.txt 2>file4.txt
$ ./redirect.sh
$ echo "---file.txt---"; cat file.txt;\
echo "---file1.txt---"; cat file1.txt; \
echo "---file2.txt---"; cat file2.txt; \
echo "---file3.txt---"; cat file3.txt; \
echo "---file4.txt----"; cat file4.txt;
---file.txt---
output
output
error
---file1.txt---
error
output
---file2.txt---
output
output
---file3.txt---
error
error
---file4.txt----
output
rror
ফলাফল যতদূর দেখা যায়, দেখে মনে হচ্ছে দ্বিতীয় ইকো স্ট্রিংটি আপনি যখন চালাবেন তখন প্রথম প্রতিধ্বনি স্ট্রিংটি ওভাররাইট করে command 1>file.txt 2>file.txt
, তবে কেন হবে তা আমি জানি না। (কোথাও রেফারেন্স আছে?)