使用set -x时,重定向bas​​h脚本中的所有输出

Tha*_*nos 35 bash io-redirection

我有一个bash脚本set -x.是否可以将此脚本的调试打印及其所有输出重定向到文件?理想情况下,我想做这样的事情:

#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"
Run Code Online (Sandbox Code Playgroud)

得到了

+ echo test
test
Run Code Online (Sandbox Code Playgroud)

在/ tmp/mylog中输出,而不是在stdout中输出.

bce*_*ary 53

这就是我刚用Google搜索的内容,我记得自己前一段时间使用过这个...

使用exec重定向脚本中所有命令的标准输出和标准错误:

#!/bin/bash
logfile=$$.log
exec > $logfile 2>&1
Run Code Online (Sandbox Code Playgroud)

有关更多重定向魔术,请查看Advanced Bash Scripting Guide - I/O重定向.

如果你也想看看在终端上的输出和调试除了在日志文件中,看到重定向标准输出复制到从bash脚本本身的日志文件.

如果你要处理的目标set -x独立的正常跟踪输出STDOUTSTDERR,看到的bash存储组的输出-x到日志文件.

  • @JoeyT,看看这是否适合你:在使用`exec 3 <&1`设置日志文件之前备份STDOUT,然后在最后添加这两行:`exec 1 <&3 3 <& - `和`cat $$ .log` - 这应该恢复STDOUT并关闭fd 3以进行清理.基于原始的`tldp`参考和[http://tldp.org/LDP/abs/html/ioredirintro.html](http://tldp.org/LDP/abs/html/ioredirintro.html) (2认同)

Pet*_*esh 13

-x输出为标准错误,所以要记录它做的事:

set -x
exec 2>/tmp/mylog
Run Code Online (Sandbox Code Playgroud)