bashスクリプトでは、
エコー「エラー」1>&2 | ティー-ログ
stderrを画面に出力しますが、ファイルへのログはありません。これらを同時に行うにはどうすればよいですか?
テキストをログ ファイルと stderr の両方にエコーするが、 stdoutにはエコーしない場合は、次のようにします。
echo "error" | tee -a log 1>&2
echo "error" 1>&2 | tee -a log
最初の部分1>&2
で、あなたが言っているのは、「stdoutをstderrにリダイレクトする」です。したがって、エコーされた出力"error"
はstderrに送られます。
Pipe(|
)は、からのみ読み取りstdout
、。からは読み取りませんstderr
。したがって、パイプからはtee
まったく取得されません。stdin
したがって、ログファイルには何も追加されません。
コンソールで stdout と stderr の両方を表示し、両方のストリームをログに送信するには、以下に示すように stderr を stdout にリダイレクトします。
progam.sh 2>&1 | tee -a log
ただし、デフォルトでは stdout のみがパイプで渡されるため、
$ echo "error" | tee
tee
echo
stderr ではなく、からのスタウトのみが表示されます。stderr は引き続きターミナルに表示されます。