使用set-x时重定向bash脚本中的所有输出

使用set-x时重定向bash脚本中的所有输出,bash,io-redirection,Bash,Io Redirection,我有一个bash脚本,其中包含set-x。是否可以将此脚本的调试打印及其所有输出重定向到一个文件?理想情况下,我想这样做: #!/bin/bash set -x (some magic command here...) > /tmp/mylog echo "test" 并得到 + echo test test 在/tmp/mylog中输出,而不是在stdout中。将-x输出发送到stderr,以便记录它: set -x exec 2>/tmp/mylog 这就是我刚才在谷歌上搜

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

#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"
并得到

+ echo test
test

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

-x
输出发送到stderr,以便记录它:

set -x
exec 2>/tmp/mylog

这就是我刚才在谷歌上搜索到的,我记得我自己不久前用过这个

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

#!/bin/bash
logfile=$$.log
exec > $logfile 2>&1
要了解更多重定向魔法,请查看

如果您还希望在日志文件中查看终端上的输出和调试,请参阅


如果要独立于正常的
STDOUT
STDERR
处理
set-x
跟踪输出的目标,请参阅。

重定向STDERRSTDOUT

exec &>> $LOG_FILE_NAME
如果要附加到文件。要覆盖文件,请执行以下操作:

exec &> $LOG_FILE_NAME

在我的例子中,脚本被从其他地方多次调用,我没有看到所有内容,所以我做了一个附加,它成功了:

exec 1>>FILENAME 2>&1
set -x

为避免混淆,请确保在每次运行之前删除文件名

看。这不是复制品,但我相信这应该能回答你的问题。很有趣。如何使用此方法将错误(stdout2)捕获到日志文件中并返回到stdout2;那么cron可以通过电子邮件发送错误警报吗?@joyet,看看这对你是否有效:在使用
exec设置日志文件之前备份STDOUT3@JoeyT我编辑了答案并添加了两个更有用的链接;第一个应该足以解释如何做到这一点。