Bash 脚本执行文件描述符返回“未找到”

Bash 脚本执行文件描述符返回“未找到”

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

相关内容