【问题标题】:Bash redirecting synchronization dilemmaBash重定向同步困境
【发布时间】:2020-12-31 19:27:50
【问题描述】:

为了自动化一些系统更新功能,我编写了一些 BASH 脚本。

我想要实现的是将stdout和stderr重定向到日志文件,将stderr重定向到运行脚本的终端。

这是我到目前为止想出的: ((./cmd >logfile) 2>&1) | tee logfile

注意 ./cmd 在这里是一个占位符,在我的脚本中它实际上是对我的一台机器的 ssh 调用。

不幸的是,从两个不同的进程写入同一个文件并不理想。我的 update.log 显然显示了两个写入相互踩踏的迹象。 我希望日志交错,以便抛出的错误接近相关的标准输出,因此写入单独的文件并在之后合并它们并不是一个真正的选择。

任何建议将不胜感激。

【问题讨论】:

    标签: bash stdout stderr


    【解决方案1】:

    tee 将其标准输入复制到控制终端,将./cmd 的标准错误传送到 tee 的标准输入,并将两个程序的标准输出重定向到文件描述符连接到日志文件tee 不会缓冲其输出,因此请确保 ./cmd 也不会缓冲,并希望一切顺利。

    { stdbuf -o 0 ./cmd 2>&1 >&3 | tee /dev/tty >&3; } 3>logfile
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      相关资源
      最近更新 更多