我想将所有调试输出设置为日志文件。所以我检查了命令行 - bash: set -x logs to file | 询问 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
手册显示您也可以这样做,那么为什么上述方法不起作用?
5
行与>
行之间不应有空格exec
。使用空格,脚本会尝试执行一个名为 的命令
5
,这就是您得到“未找到”的原因。如果没有空格,则将文件描述符 5 附加到给定的文件名以进行输出。
此外,不需要导出变量
BASH_XTRACEFD
,只需设置它就足够了:错误让你走到了一半:
exec
试图执行一个名为 的命令5
,但没有找到它。重定向文件描述符的语法要求文件描述符编号和重定向运算符之间没有空格,如下所示: