私はそれに含まれているbashスクリプトを持っset -x
ています。このスクリプトとそのすべての出力のデバッグ出力をファイルにリダイレクトすることは可能ですか?理想的には、次のようなことをしたいと思います。
#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"
と取得します
+ echo test
test
stdoutではなく/tmp/mylogに出力します。
私はそれに含まれているbashスクリプトを持っset -x
ています。このスクリプトとそのすべての出力のデバッグ出力をファイルにリダイレクトすることは可能ですか?理想的には、次のようなことをしたいと思います。
#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"
と取得します
+ echo test
test
stdoutではなく/tmp/mylogに出力します。
これは私がちょうどググったものであり、私はしばらく前にこれを使用したことを覚えています...
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
参照してください。
出力はstderrに-x
送られるので、ログに記録するには次のようにします。
set -x
exec 2>/tmp/mylog
私の場合、スクリプトは他の場所から何度も呼び出されていましたが、すべてが表示されていなかったため、代わりに追加を実行しました。これで機能しました。
exec 1>>FILENAME 2>&1
set -x
混乱を避けるために、各実行の前に必ずFILENAMEを削除してください。
stderrとstdoutをリダイレクトするには:
exec &>> $LOG_FILE_NAME
ファイルに追加したい場合。ファイルを上書きするには:
exec &> $LOG_FILE_NAME