Sha*_*esh 4 unix linux bash tee
我将一些工具 stdout 重定向到 tee 命令,以便可以在终端和日志文件中看到当前进度
这是我运行工具的代码片段,其标准输出被馈送到 tee 命令,并且此代码片段是从 tcl 脚本编写的。
$(EH_SUBMIT) $(ICC_EXEC) $(OPTIONS) -f ./scripts/$@.tcl | tee -i ./logs/$@.log
Run Code Online (Sandbox Code Playgroud)
我可以在终端上看到当前的实时进度,但在日志文件中看不到相同的观察结果!并将 stdout 逐块写入日志文件
怎样tee运作?它是按块写入还是按时间写入还是两者兼而有之?如果是块,最小块大小是多少?如果是时间,最短持续时间是多少?
我需要解析实时日志条目以进行某些数据分析(当我通过读取日志文件tail -f,然后随着日志文件的增长推送新数据)。
除非程序自己处理缓冲,否则 IO 流的缓冲是在 libc 中处理的。标准行为是:如果进入终端,则按行缓冲输出;如果进入非终端(即文件或管道),则按块缓冲输出。这就是为什么输出出现在日志文件中,如您所描述的那样:逐块显示。此行为是为了性能优化。
在 Linux 上,该stdbuf命令可用于运行具有调整缓冲区的程序。你需要像这样运行你的程序:
stdbuf -oL your_program >> your.log &
tail -f your.log
Run Code Online (Sandbox Code Playgroud)
-oL表示按行缓冲标准输出。
| 归档时间: |
|
| 查看次数: |
2397 次 |
| 最近记录: |