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

时间:2012-06-27 15:09:56

标签: bash io-redirection

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

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

并获取

+ echo test
test

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

4 个答案:

答案 0 :(得分:50)

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

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

#!/bin/bash
logfile=$$.log
exec > $logfile 2>&1

要获得更多重定向魔法,请查看Advanced Bash Scripting Guide - I/O Redirection

如果您还想在日志文件中的添加中查看终端上的输出和调试,请参阅redirect COPY of stdout to log file from within bash script itself

如果您想独立于正常set -xSTDOUT处理STDERR跟踪输出的目的地,请参阅bash storing the output of set -x to log file

答案 1 :(得分:13)

-x输出转到stderr,所以要记录它:

set -x
exec 2>/tmp/mylog

答案 2 :(得分:0)

要重定向 stderr stdout

exec &>> $LOG_FILE_NAME

如果要追加到文件。要覆盖文件:

exec &> $LOG_FILE_NAME

答案 3 :(得分:0)

在我的情况下,该脚本在其他地方被多次调用,但是我什么都没看到,所以我做了一个附加操作,它起作用了:

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

为避免混淆,请确保在每次运行之前删除FILENAME。