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