输出未重定向到文件

输出未重定向到文件

我遇到了奇怪的事情(或者说表现出对 Linux 的无知)。

我想了解 ping 请求的概率分布,所以我想我会 ping 一些随机站点一段时间,grep 输出以仅保存 ms,然后重定向到文件。我这样做了。

ping www.doggiedooley.com | grep -o "[[:digit:]]*.[[:digit:]]* ms" > ping.txt

我对此命令寄予厚望,但即使创建了文件,过了一段时间后它仍然不包含任何内容。如果我删除重定向,则会显示输出。我甚至可以将输出成功重定向到另一个终端。

ping www.doggiedooley.com | grep -o "[[:digit:]]*.[[:digit:]]* ms" > /dev/pts/1

为什么第一个命令不能正常工作?

答案1

看起来像是 stdout 缓冲问题。您可以在重定向之前使用以下命令将其关闭:

stdbuf -o0

因此使用:

 ping www.doggiedooley.com | stdbuf -o0 grep -o "[[:digit:]]*.[[:digit:]]* ms" > ping.txt

或者使用-c选项来ping限制发送数据包。

相关内容