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
teeechostderr ではなく、からのスタウトのみが表示されます。stderr は引き続きターミナルに表示されます。