bash + 2つのログに標準出力とエラーを書き込む

bash + 2つのログに標準出力とエラーを書き込む

私のbashスクリプトでは、次のようにstdoutとstderrからlog.txtまですべてを作成します。

export LOG=/tmp/installation/log.txt

exec > $LOG 2>&1

だからすべてが記録されます/tmp/installation/log.txt

しかし、2つの異なるログパスに書き込む方法

同じstdoutとstderrを2つのログファイルに書きたいとしましょう。

それでは、この場合の構文は何ですか?

はい

export LOG=/tmp/installation/log.txt
export LOG_I=/tmp/installation/log_info.txt

したがって、両方のログは同じ内容を持ちます。

私たちはこれを行うことができますか?

export LOG=/tmp/installation/log.txt
export LOG_I=/tmp/installation/log_info.txt

exec > $LOG $LOG_I 2>&1

答え1

注文

exec > $LOG $LOG_I 2>&1

に関連しているので、それほど効率的ではありません。

exec $LOG_I > $LOG 2>&1

つまり、exec引用符のない拡張によって提供されたコマンドを試してください$LOG_I


データを複数のファイルに保存するには、コピーする必要があります。これはで行われますtee

例えば、

log1="/tmp/logfile-1.txt"
log2="/tmp/logfile-2.txt"

exec > >( tee "$log1" >"$log2" ) 2>&1

teeこれはプロセスオーバーライドを使用して標準出力ストリームを呼び出します。ユーティリティteeは入力を受け取りに保存し、コピーに$log1リダイレクトします$log2tee常に標準出力に入力コピーを作成しますが、それを使用することもできますtee "$log1" "$log2" >/dev/null)。その後、標準エラーストリームを標準出力と同じ場所にリダイレクトして、tee同じ方法でコピーできます。

到着追加2 つのログには次を使用します。

exec > >( tee -a "$log1" >>"$log2" ) 2>&1

関連情報