2>&1を指定した場合のバックグラウンド実行の&は何処に記述すればよいか †2>&1により標準エラーを標準出力に変更し&によるバックグラウンド実行をしたい場合、以下のどちらの記述が正しいのかちょっと気になり確かめてみた。
関連資料 †
確認シェルスクリプト †以下のような、stdout, stderrにechoするシェルスクリプトを作成した。 #/bin/bash for i in `seq 1 5` do echo "stdout" echo "stderr" 1>&2 done (1>&2の意味はstderrにechoするようにする。参考資料:「逆引きUNIXコマンド/echoコマンドの出力を標準エラー(stderr)に出力する方法」) 実行結果 †バックグラウンド実行の&の位置を2>&1の前と後ろで動作させてみた結果は以下の通り。 バックグラウンド実行の&が2>&1の後ろの場合 †作成した確認シェルスクリプトを下行のようにして起動 ./bg.sh > out.log 2>&1 & 実行結果 $ ./bg.sh > out.log 2>&1 & [1] 6029 $ [1]+ Done ./bg.sh > out.log 2>&1 $ cat out.log stdout stderr stdout stderr stdout stderr stdout stderr stdout stderr stdout, stdout共にout.logファイルに出力されているので意図した動作となっている。 バックグラウンド実行の&が2>&1の前の場合 †作成した確認シェルスクリプトを下行のようにして起動 ./bg.sh > out.log & 2>&1 実行結果 $ ./bg.sh > out.log & 2>&1 [1] 6035 $ stderr stderr stderr stderr stderr [1]+ Done ./bg.sh > out.log $ cat out.log stdout stdout stdout stdout stdout stdoutのみout.logファイルに出力されstderrは端末に出力され意図した動作となっていない。 |