将输出写入 log.out 和控制台

Write output to both log.out and console

我有一个基本的构建脚本,我想将其整个输出记录到一个日志文件中。例子

exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
echo "Run Date: $(date)"
echo "another line"
conda -V

有了这个,控制台保持空白,所有内容都保存到 log.out 这对我来说非常有用,但我也希望它仍能将所有内容打印到控制台。

本质上,我希望它模仿

的行为
echo "Run Date: $(date)" 2>&1 | tee -a log.out
echo "another line"  2>&1 | tee -a log.out
conda -V 2>&1 | tee -a log.out

无需在每行末尾键入 2>&1 | tee -a log.out

您可以通过将所有命令包含在一个代码块中并重定向整个块的输出来实现。您仍然需要处理重定向语法,但它只会出现在一个地方:

{
    echo "Run Date: $(date)"
    echo "another line"
    conda -V
} 2>&1 | tee -a log.out

您可以将所有命令分组并使用 tee:

将输出捕获到日志中
#!/bin/bash

{
    echo "duck"
    echo "duck"
    echo "goose" >>/dev/stderr
    echo "Run Date: $(date)"
} 2>&1 |tee -a log.out

... 或者只是将脚本输出到 stdout/stderr 就像没有重定向一样,并在启动脚本时捕获该输出? ./test.sh 2>&1 |tee -a log.out