我想将所有调试输出设置到日志文件中。所以我检查了命令行 - bash:将 -x 日志设置为文件 |询问 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