41

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

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

と取得します

+ echo test
test

stdoutではなく/tmp/mylogに出力します。

4

4 に答える 4

61

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

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

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

リダイレクトの魔法の詳細については、Advanced Bash Scripting Guide-I /ORedirectionをご覧ください。

ログファイルだけでなく端末でも出力とデバッグを確認したい場合は、bashスクリプト自体からstdoutのCOPYをログファイルにリダイレクトするを参照してください。

set -xトレース出力の宛先を通常STDOUTおよびとは別に処理する場合は、set-xの出力をログファイルに保存するbashをSTDERR参照してください。

于 2012-06-27T15:15:32.673 に答える
15

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

set -x
exec 2>/tmp/mylog
于 2012-06-27T15:14:39.100 に答える
3

私の場合、スクリプトは他の場所から何度も呼び出されていましたが、すべてが表示されていなかったため、代わりに追加を実行しました。これで機能しました。

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

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

于 2019-06-20T21:42:33.153 に答える
2

stderrstdoutをリダイレクトするには:

exec &>> $LOG_FILE_NAME

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

exec &> $LOG_FILE_NAME
于 2019-02-01T20:27:28.873 に答える