exec を使用して、後続のすべてのコマンドの stderr をリダイレクトします。

exec を使用して、後続のすべてのコマンドの stderr をリダイレクトします。

すべての出力をファイル、デバッグログ、およびターミナルにリダイレクトする必要があるbashファイルがあります。スクリプト内のすべてのコマンドをデバッグして記録するには、stdoutとstderrをリダイレクトする必要があります。

2>&1 | tee -a $DEBUGファイル内のすべてのコマンドに追加したくありません。私と一緒に暮らすことができます| tee -a $DEBUG

似たようなことでこれを行う方法があったと思いますexec 2>&1

現在私は次のようなものを使用しています。

#!/bin/bash
DEBUGLOG=/tmp/debug
exec 2>&1
somecommand | tee -a $DEBUGLOG
somecommand2 | tee -a $DEBUGLOG
somecommand3 | tee -a $DEBUGLOG

しかし、うまくいきません。誰もが解決策を持っているか、理由を説明できますか?

ベストアンサー1

次のようにスクリプトの上部でexecを使用できます。

exec > >(tee "$HOME/somefile.log") 2>&1

たとえば、

#!/bin/bash -

exec > >(tee "$HOME/somefile.log") 2>&1

echo "$HOME"
echo hi
date
date +%F
echo bye 1>&2

次のようにファイル$HOME/somefile.logと端末に出力します。

/home/saml
hi
Sun Jan 20 13:54:17 EST 2013
2013-01-20
bye

おすすめ記事