如何将标准输出和标准错误复制到日志中?

如何将标准输出和标准错误复制到日志中?

我需要将标准错误和标准输出写入$LOG,同时还从脚本中将它们打印在控制台上。

该脚本有很多命令,因此重定向每个命令并不是一个好的解决方案。

我已经尝试过这个,但它没有按预期工作:

#!/bin/bash

LOG=/var/tmp/log

#...

exec > $LOG  2>&1

我的目标是写入$LOG任何标准输出和标准错误,但同时也写入标准输出(在控制台上)。是否可以?

答案1

使用球座。例如:

command 2>&1 | tee file.txt

它运行command将 SDTERR 重定向到 SDTOUT。tee将 STDIN 复制到 STDOUT 和文件file.txt.

在 bash 中你可以使用流程替代通过以下方式将输出复制到$LOG

exec &> >(tee $LOG)

然而这巴什主义 行不通在其他贝壳上。

答案2

我不确定这是否是最干净的解决方案,但它对我有用:

#!/bin/bash

LOG=/var/tmp/log

(
# lots of commands
# ...

) 2>&1 | tee $LOG

不过@sebasth 给出了更好的解决方案:

#!/bin/bash

LOG=/var/tmp/log

exec &> >(tee $LOG)

#...

相关内容