起動中の一部のクラウドシステムでは、特定のファイル、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))
デフォルトのプロセス交換の最初のものは、tee
STDOUT / STDERRをターミナルと入れ子になったプロセス交換に転送してtee
内部でファイルに内容を保存し、パイプライン出力をSTDIN/tmp/box-setup.log
に送信するために使用されます。logger