すべてのデバッグ出力をログファイルに設定したいと思います。だから確認してみたコマンドライン - bash: ファイルに -x ログを設定する Ask Ubuntuそして指示に従ってください。
テストスクリプト:
#!/bin/bash
exec 5 >/var/log/test.log
export BASH_XTRACEFD=5
main(){
set -x
echo hello
set +x
}
main
ランニング:
./test-script
返品:
exec: 5: not found
マニュアルにはこれもできると述べていますが、なぜ上記の方法が機能しないのですか?
答え1
5
行の間と行の間には>
スペースを入れないでくださいexec
。
スペースを使用すると、スクリプトは名前付きコマンドを実行しようとするため、5
「見つかりません」というメッセージが表示されます。
空白がない場合は、出力用に指定されたファイル名にファイル記述子5が追加されます。
また、変数をエクスポートする必要はなく、BASH_XTRACEFD
設定するだけで十分です。
#!/bin/bash
exec 5>test.log
BASH_XTRACEFD=5
main () {
set -x
echo hello
set +x
}
main
答え2
エラーが途中で発生します。
実行:5:見つかりません
exec
名前付きコマンドを実行してみましたが、5
見つかりませんでした。
これファイル記述子をリダイレクトするための構文呼ぶスペースなし次のように、ファイル記述子番号とリダイレクト演算子の間に:
exec 5> /var/log/test.log