次のような簡単なスクリプト test.sh を作成しました。
echo "StdErr" > /dev/stderr
echo "StdOut" > /dev/stdout
このSO questionへの回答とAdvanced Bash-Scripting Guideによると、以下は上記のスクリプトから stderr を stdout にリダイレクトする必要があります。
$ sh /tmp/test.sh 2>&1
そして確かにそうです:
$ sh /tmp/test.sh 2>&1 |tee file;
$ cat file
StdErr
StdOut
私が疑問に思っているのは、次のコードで stderr からの出力がどこに行くのかということです。
$ sh /tmp/test.sh > file 2>&1
$ cat file
StdOut
GNU bash、バージョン 4.0.24(2) リリースを使用しています。