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

e15*_*ple 2 bash exec

我想将所有调试输出设置到日志文件中。所以我检查了命令行 - bash: set -x messages to file | 询问 Ubuntu并按照说明进行操作。

测试脚本:

#!/bin/bash
exec 5 >/var/log/test.log
export BASH_XTRACEFD=5
main(){
set -x
echo hello
set +x
}
main
Run Code Online (Sandbox Code Playgroud)

跑步:

./test-script
Run Code Online (Sandbox Code Playgroud)

返回:

exec: 5: not found
Run Code Online (Sandbox Code Playgroud)

手册显示你也可以做到这一点,那么为什么上面的方法不起作用呢?

Kus*_*nda 5

5行之间和>行上不应有空格exec

使用空格,脚本会尝试执行名为 的命令5,这就是为什么您会收到“未找到”的消息。

如果没有空格,则将文件描述符 5 附加到给定文件名以进行输出。

此外,不需要导出变量BASH_XTRACEFD,只需设置它就足够了:

#!/bin/bash 

exec 5>test.log   

BASH_XTRACEFD=5

main () {           
    set -x        
    echo hello    
    set +x        
}

main 
Run Code Online (Sandbox Code Playgroud)