41

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

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

并得到

+ echo test
test

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

4

4 回答 4

61

这是我刚刚用谷歌搜索的内容,我记得我前段时间使用过这个......

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

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

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

如果除了日志文件之外,您还想在终端上查看输出和调试,请参阅将 stdout 的 COPY 从 bash 脚本本身重定向到日志文件

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

于 2012-06-27T15:15:32.673 回答
15

输出到-xstderr,所以要记录它:

set -x
exec 2>/tmp/mylog
于 2012-06-27T15:14:39.100 回答
3

就我而言,脚本从其他地方被多次调用,我没有看到所有内容,所以我做了一个追加,它起作用了:

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

为避免混淆,请务必在每次运行前删除 FILENAME。

于 2019-06-20T21:42:33.153 回答
2

重定向stderrstdout

exec &>> $LOG_FILE_NAME

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

exec &> $LOG_FILE_NAME
于 2019-02-01T20:27:28.873 回答