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

时间:2015-09-27 22:58:02

标签: linux stdout stderr

我遇到了一个bash脚本的问题,该脚本被重复执行一个程序(不是我自己的程序)并将每次执行的输出附加到文本文件中。

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

到目前为止一切顺利。问题是执行此操作后,log.txt的内容与程序通常生成的终端输出非常不同。 程序的输出在stdout和stderr之间交替,这样在终端上它可能看起来像这样:

stdout- stderr- stdout- stderr - ...

等等。现在在文本文件而不是这个文件中,有更大的“块”stdout和stderr消息集中在一起。例如。文件开头可能有10行stdout-output,后跟10行stderr-output等等。

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

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

1 个答案:

答案 0 :(得分:2)

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