web-dev-qa-db-ja.com

set -xを使用する場合、bashスクリプトのすべての出力をリダイレクトします

set -xを含むbashスクリプトがあります。このスクリプトのデバッグ出力とすべての出力をファイルにリダイレクトすることは可能ですか?理想的には、次のようなことをしたいと思います。

#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"

を取得

+ echo test
test

標準出力ではなく、/ tmp/mylogに出力されます。

34
Thanos

これは私がちょうどグーグルで調べたものであり、私はしばらく前にこれを使用して自分を覚えています...

Execを使用して、スクリプト内のすべてのコマンドの標準出力と標準エラーの両方をリダイレクトします。

#!/bin/bash
logfile=$$.log
exec > $logfile 2>&1

リダイレクトマジックの詳細については、 Advanced Bash Scripting Guide-I/O Redirection を参照してください。

ログファイル内のadditionの端末で出力とデバッグも表示する場合は、 redirect COPYのbashスクリプト自体からログファイルへのstdout

set -xトレース出力の宛先を通常のSTDOUTおよびSTDERRから独立して処理する場合は、set -x toの出力を格納する bashを参照してください。ログファイル

52
bcelary

-x出力はstderrに送られるため、ログに記録するには次のようにします。

set -x
exec 2>/tmp/mylog
13
Petesh

私の場合、スクリプトは他の場所から複数回呼び出されていましたが、すべてが表示されていなかったため、代わりに追加を行いました。

exec 1>>FILENAME 2>&1
set -x

混乱を避けるため、実行する前に必ずFILENAMEを削除してください。

1
calamari

stderrおよびstdoutをリダイレクトするには:

exec &>> $LOG_FILE_NAME

ファイルに追加する場合。ファイルを上書きするには:

exec &> $LOG_FILE_NAME
0
PALEN