【发布时间】:2015-11-14 07:46:33
【问题描述】:
我想要实现的是在日志文件的每一行之前添加时间戳。日志文件同时接收 stdout 和 stderr。
#!/bin/sh
stdbuf -o0 -e0 continuously_running_command 2>&1 | stdbuf -o0 -e0 ts >> log_file
实用程序 ts 添加时间戳(我也尝试使用 bash 代码来实现这一点)。 stdbuf 在此管道中使用时不运行。当移除管道并仅重定向 stderr 而不添加时间戳时,它可以正常工作。
知道如何解决它吗?
【问题讨论】:
-
为什么要行缓冲输出?我的意思是你正在重定向到一个文件。
-
@nick 你能详细说明一下你那里的
continuously_running_command是什么吗?如果我在 stdout 和 stderr 中用一个小的无限循环打印来提供它,它就可以正常工作。 -
@hek2mgl 我想要行缓冲输出的原因是因为如果程序终止,最后一行不会保存。
-
@sokin 我正在运行的程序是rtmpdump,一个视频流捕获程序。
-
@Nick 当程序终止时,输出缓冲区将被刷新。如果你错过了一些行,那不是缓冲的问题。
标签: linux bash shell unix pipeline