私の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
リダイレクトします$log2
(tee
常に標準出力に入力コピーを作成しますが、それを使用することもできますtee "$log1" "$log2" >/dev/null
)。その後、標準エラーストリームを標準出力と同じ場所にリダイレクトして、tee
同じ方法でコピーできます。
到着追加2 つのログには次を使用します。
exec > >( tee -a "$log1" >>"$log2" ) 2>&1