stdin、stderr、リダイレクト、ログ

stdin、stderr、リダイレクト、ログ

これらの2行の間に違いはありますか?

/home/user/script.sh >> /home/user/stdout_and_error.log  2>&1
/home/user/script.sh 2>&1 >> /home/user/stdout_and_error.log  

スクリプトの標準出力と実行エラーをログファイルに保存したいと思います。違いがなければ、ロギング自体を記録したい場合はどうすればよいですか?

ベストアンサー1

はい、少し違います。

/home/user/script.sh >> /home/user/stdout_and_error.log  2>&1

それからSTDOUTとSTDERRが/home/user/stdout_and_error.log

/home/user/script.sh 2>&1 >> /home/user/stdout_and_error.log  

これにより、STDOUTが前のSTDOUTに送信され、/home/user/stdout_and_error.logSTDERRが以前のSTDOUTに送信されます。

 

シェルリダイレクトを実行すると、リダイレクトの左側が現在のリダイレクトの右側の位置に移動します。つまり2>&1、現在 STDOUT(1) があるところに STDERR(2) を送ります。
ただし、STDOUTを別の場所にリダイレクトすると、STDERRはフォローしません。 STDOUT が以前にあったところから続く。そのため、最初の例ではSTDOUTとSTDERRの両方が同じ位置に移動しますが、2番目の例ではそうではありません。

おすすめ記事