すべての出力をファイル、デバッグログ、およびターミナルにリダイレクトする必要がある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