エラーをファイルにリダイレクトする方法は?

エラーをファイルにリダイレクトする方法は?

append出力をファイルにリダイレクトする簡単なスクリプトがあります。

filename="/home/ronnie/tmp/hello"

date=$(date)
echo "$date" >> $filename

それでは、エラーを生成するdate=$(date)ように変更したとしましょう。date= $(date)

私の修正されたスクリプト:

filename="/home/ronnie/tmp/hello"

date= $(date)
echo "$date" >> $filename 2>> $filename 
#Also tried echo "$date" >> $filename 2>&1

上記のスクリプトはエラーをtest.sh: line 5: Fri: command not foundファイルにリダイレクトすると思いましたが、helloファイルに新しい行を追加し、エラーが私のstdout

私のバッシュバージョン:

ronnier@ronnie:~/tmp$ bash --version
GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)

だから私はどこに間違って行きましたか?

ベストアンサー1

エラーを引き起こす行は、date =$(date)エラーがstderrに送信されることです。このステップでは、stderrをどこにもリダイレクトしません。後続の行はstderrを$ filenameに送信しますが、これはエラーを引き起こす行ではありません。

目的の効果を得る1つの方法は、スクリプトを実行してstderrを別の場所に送信することです。

./myscript 2>> errors.txt

この時点で error.txt にはエラーが含まれます。

したがって、問題は、エラーを生成する行がスクリプト自体のエラーであり、出力がリダイレクトされるスクリプトから呼び出された外部コマンドによって発生したエラーではないことです。つまり、リダイレクトする必要があるトップレベルのスクリプト出力です。

おすすめ記事