使用 exec 和 tee 同时将日志重定向到 stdout 和日志文件

使用 exec 和 tee 同时将日志重定向到 stdout 和日志文件

在 bash 脚本中,如何使用 将所有标准输出重定向到日志文件并tee在屏幕上输出exec

log_file="$HOME/logs/install.txt-`date +'%Y-%m-%d_%H-%M-%S'`"
[ -f "$log_file" ] || touch "$log_file"
exec 1>> $log_file 2>&1

此代码将所有日志重定向到日志文件,但不重定向到屏幕。

答案1

使用流程替代&重定向exec:

exec &> >(tee -a "$log_file")
echo "This will be logged to the file and to the screen"

$log_file将包含脚本和任何子进程的输出,并且输出也将打印到屏幕上。

  • >(...)启动该进程...并返回一个表示其标准输入的文件。

  • exec &> ...将标准输出和标准错误重定向到...脚本的其余部分(exec > ...仅用于标准输出)。

  • tee -a将其标准输入附加到文件中,并将其打印到屏幕上。

答案2

exec >> $log_file 2>&1 && tail $log_file

相关内容