bash + 将标准输出和错误写入两个日志

bash + 将标准输出和错误写入两个日志

在我的 bash 脚本中,我使用以下方法将标准输出和标准错误中的所有内容写入 log.txt

export LOG=/tmp/installation/log.txt

exec > $LOG 2>&1

所以一切都在写给/tmp/installation/log.txt

但如何写入两个不同的日志路径

假设我想将相同的标准输出和标准错误写入 2 个日志文件

那么这种情况下的语法是怎样的呢?

例子

export LOG=/tmp/installation/log.txt
export LOG_I=/tmp/installation/log_info.txt

所以两个日志都会得到相同的内容

我们可以这样做吗?

export LOG=/tmp/installation/log.txt
export LOG_I=/tmp/installation/log_info.txt

exec > $LOG $LOG_I 2>&1

答案1

你的命令

exec > $LOG $LOG_I 2>&1

不太有效,因为它与

exec $LOG_I > $LOG 2>&1

即,它将尝试exec由未加引号的扩展给出的命令$LOG_I


要将数据放入多个文件中,您必须复制它。这是用 完成的tee

例如,

log1="/tmp/logfile-1.txt"
log2="/tmp/logfile-2.txt"

exec > >( tee "$log1" >"$log2" ) 2>&1

这使用进程替换来调用tee标准输出流。该tee实用程序将获取其输入并将其保存到$log1,然后将其副本重定向到$log2tee始终在其标准输出上生成其输入的副本,但您也可以使用tee "$log1" "$log2" >/dev/null)。然后我们将标准错误流重定向到与标准输出相同的位置,以便tee可以以相同的方式复制它。

附加对于两个日志,您将使用

exec > >( tee -a "$log1" >>"$log2" ) 2>&1

相关内容