我遇到了奇怪的事情(或者说表现出对 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
限制发送数据包。