gpt4 book ai didi

linux - 流水线化 stderr 时如何使行缓冲工作?

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:47 24 4
gpt4 key购买 nike

我想要实现的是在日志文件的每一行之前添加时间戳。日志文件接收 stdoutstderr

#!/bin/sh

stdbuf -o0 -e0 continuously_running_command 2>&1 | stdbuf -o0 -e0 ts >> log_file

实用程序 ts 添加了时间戳(我也尝试使用 bash 代码实现此目的)。 stdbuf 在此管道中使用时不运行。当删除管道并仅重定向 stderr 而不添加时间戳时,它工作正常。

关于如何修复它有任何想法吗?

最佳答案

也许问题出在使用的缓冲模式上:

stdbuf -o0 -e0 continuously_running_command 2>&1 | stdbuf -o0 -e0 ts >> log_file

根据stdbuf手册页,您选择 0 可能会导致标准输出和标准错误以意想不到的方式混合在一起:

If MODE is 'L' the corresponding stream will be line buffered. This option is invalid with standard input.

If MODE is '0' the corresponding stream will be unbuffered.

当无缓冲时,这意味着从应用程序中写入除整行以外的任何内容更有可能导致部分行被写入任一流。程序将错误消息分成几部分编写并不少见,例如,一个文件名,然后是一条消息。使用行缓冲可降低混合不完整行的可能性。

关于linux - 流水线化 stderr 时如何使行缓冲工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33706297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com