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
我在使用 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