単に set -x すると標準エラーに出力されるが、
$BASH_XTRACEFD
で出力先のファイルディスクリプタを指定できる。
FD=3でファイルを開いてそちらに向ける
#!/bin/bash
# FD=3 で出力先ファイルを追記モードでオープン
TRACE_LOG=${TRACE_LOG-/tmp/xtrace.$$.log}
exec 3>>$TRACE_LOG
# 上書きしたい場合は演算子を変える
# exec 3<>$TRACE_LOG
# 出力先を FD=3 に指定
BASH_XTRACEFD=3
# デバッグ出力開始
set -x
#
# 必要な処理を実行
#
# デバッグ出力終了
set +x
# 終わったらファイルを閉じる (明示的にやらなくてもスクリプト終了時に閉じる)
exec 3>&-