如何从管道 linux 命令连续将输出发送到文件?

How to send output to a file continuously from a piped linux command?

以下命令每秒生成一次输出,持续 60 秒。

sar -n DEV  1 60 | grep lo

如果我将它重定向到一个文件,文件 sar.log 会持续更新,即每秒更新一次

sar -n DEV  1 60 > sar.log &

但是,一旦通过管道将其重定向到文件,它只会在完成后(即 60 秒后)填充文件 sar.log。

sar -n DEV 1 60 | grep lo > sar.log &

如何 grep 并重定向到一个文件,以便日志文件不断更新,即每秒更新一次

我可以使用除 grep 以外的其他东西,如果它符合我选择某些东西并每秒重定向到一个文件的目的。

使用 GNU grep:添加选项 --line-buffered 以在输出上使用行缓冲。这可能会导致性能下降。

我发现 How to 'grep' a continuous stream? 也是一个很好的答案。

sar -n DEV 1 10 | stdbuf -o0 grep lo > sar.log &