Linux stdout stderr 重定向到文件:不同于终端输出

Linux stdout stderr redirect to file: different from terminal output

我在使用 bash 脚本时遇到问题,该脚本旨在重复执行程序(不是我自己的程序)并将每次执行的输出附加到文本文件。

#!/bin/bash
for run in {1..100}
  make prog >> log.txt 2>&1
done

到目前为止一切顺利。问题在于执行此命令后,log.txt 的内容与程序正常生成的终端输出有很大不同。 该程序的输出在 stdout 和 stderr 之间交替,因此在终端上它可能看起来像这样:

标准输出- 标准错误- 标准输出- 标准错误 - ...

等等。现在在文本文件中,而不是这个,有更大的 'chunks' stdout 和 stderr 消息集中在一起。例如。文件开头可能有 10 行标准输出输出,后面跟着 10 行标准错误输出,依此类推。

我想这是某种缓冲问题。我该如何解决这个问题?

我们将不胜感激任何形式的帮助。

关闭输出缓冲可能会有帮助。 unbuffer 命令和 stdbuf 命令都可以控制缓冲区大小,例如:stdbuf -o0 -e0 yourcommandhere