stdoutとstderrをファイル、syslog、および端末に送信する

stdoutとstderrをファイル、syslog、および端末に送信する

起動中の一部のクラウドシステムでは、特定のファイル、syslog、およびターミナル/コンソールにログインしようとします。

マイコンピュータの設定/クラウド初期化スクリプトの上部には次のものがあります。

#!/bin/bash
exec &> >(tee "/tmp/box-setup.log" | logger -t box-setup)
apt-get install -y some-package

これは、出力をファイルとsyslogに送信するのに有効ですが、出力を端末にパイプすることはありません。

通常、リモートコンソールでデバッグしない限り、ターミナル出力がないことは大きな問題ではありません。これが発生した場合、bashスクリプトの実行中にコンソールが空になったため、完全に目が遠くなりました。

bashリダイレクトや他の手段を使用してすべての出力(stdoutとstderr)をファイル、syslog、および端末に同時にパイプする簡単な方法はありますか?

Ubuntu 16.04を実行しています。

ベストアンサー1

tee次のように、入れ子になったプロセスの置き換えと1つを追加します。

exec &> >(tee >(tee "/tmp/box-setup.log" | logger -t box-setup))

デフォルトのプロセス交換の最初のものは、teeSTDOUT / STDERRをターミナルと入れ子になったプロセス交換に転送してtee内部でファイルに内容を保存し、パイプライン出力をSTDIN/tmp/box-setup.logに送信するために使用されます。logger

おすすめ記事