bashスクリプトがあり、set -xを使用してスクリプトの一部をキャプチャし、その出力をファイルにリダイレクトしたいと思います。
ENVFILE設定は表示できますが印刷されます。
set -xの出力をstd outの代わりにファイルにキャプチャする方法はありますか?
#!/bin/sh
...a bunch of stuff....
if [ -e ${ENVFILE} ]; then
set -x
. ${ENVFILE}
set +x
fi # ! -e PROJOB
... a bunch of stuff ....
答え1
bashを使用している場合は、次のものを使用できます。BASH_XTRACEFD:
...
if [ -e ${ENVFILE} ]; then
BASH_XTRACEFD=3
set -x
. ${ENVFILE}
set +x
unset BASH_XTRACEFD
fi # ! -e PROJOB
...
次に、次のようにスクリプトを実行します。
/path/to/script 3>/path/to/trace.output
すでにFD 3を使用している場合は、3以外のファイル記述子を使用してください。
答え2
私はこれをします。コードのコメントを見てください。
#!/bin/sh
...a bunch of stuff....
if [ -e ${ENVFILE} ]; then
#save the file descriptor of the current stderr
exec 3>&2
#redirect to the file
exec 2>/.../you_file
set -x
. ${ENVFILE}
set +x
#restore original redirection
exec 2>&3
#close file descriptor 3
exec 3>&-
fi # ! -e PROJOB
... a bunch of stuff ....
デバッグ内容の横に標準出力をリダイレクトするには、fd 2と同様にファイル記述子1をリダイレクトする必要がありますexec
。