输出不重定向到文件

can*_*ejo 2 grep ping redirect

我正在经历奇怪的事情(或者更确切地说是表现出对 Linux 的无知)。

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

ping www.doggiedooley.com | grep -o "[[:digit:]]*.[[:digit:]]* ms" > ping.txt
Run Code Online (Sandbox Code Playgroud)

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

ping www.doggiedooley.com | grep -o "[[:digit:]]*.[[:digit:]]* ms" > /dev/pts/1
Run Code Online (Sandbox Code Playgroud)

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

Nyk*_*kin 6

看起来像一个标准输出缓冲问题。您可以在重定向之前将其关闭:

stdbuf -o0
Run Code Online (Sandbox Code Playgroud)

所以使用:

 ping www.doggiedooley.com | stdbuf -o0 grep -o "[[:digit:]]*.[[:digit:]]* ms" > ping.txt
Run Code Online (Sandbox Code Playgroud)

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