在我的 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
,然后将其副本重定向到$log2
(tee
始终在其标准输出上生成其输入的副本,但您也可以使用tee "$log1" "$log2" >/dev/null
)。然后我们将标准错误流重定向到与标准输出相同的位置,以便tee
可以以相同的方式复制它。
到附加对于两个日志,您将使用
exec > >( tee -a "$log1" >>"$log2" ) 2>&1