私のbashスクリプトでは、標準出力と標準エラーからlog.txtにすべてを書き込むために、次のアプローチを使用します。
export LOG=/tmp/installation/log.txt
exec > $LOG 2>&1
したがって、すべてが/tmp/installation/log.txt
に書き込んでいます。
しかし、2つの異なるログパスへの書き込みを行う方法
同じ標準出力と標準エラーの両方を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
あなたの命令
exec > $LOG $LOG_I 2>&1
それはと同じなので、完全には機能しません
exec $LOG_I > $LOG 2>&1
つまり、引用符で囲まれていない$LOG_I
の展開によって与えられたコマンドをexec
しようとします。
データを複数のファイルに入れるには、データを複製する必要があります。これはtee
で行われます。
例えば、
log1="/tmp/logfile-1.txt"
log2="/tmp/logfile-2.txt"
exec > >( tee "$log1" >"$log2" ) 2>&1
これは、プロセス置換を使用して、標準出力ストリームのtee
を呼び出します。 tee
ユーティリティは入力を取得して$log1
に保存し、そのコピーを$log2
にリダイレクトします(tee
は常に入力のコピーを生成します標準出力ですが、tee "$log1" "$log2" >/dev/null
)を使用することもできます。次に、標準エラーストリームを標準出力と同じ場所にリダイレクトして、tee
が同じ方法で複製できるようにします。
追加両方のログに、次を使用します
exec > >( tee -a "$log1" >>"$log2" ) 2>&1