运行此:不打印通过两个命令
ping google.com | grep -o 'PING'
将打印PING
到终端,所以我假定意味着grep的的标准输出由终端捕获。
那么为什么不按照下面的命令打印什么?终端只是挂:
ping google.com | grep -o 'PING' | grep -o 'IN'
我认为,第一grep命令的标准输出将被重定向到第二的grep的标准输入。然后第二个grep的标准输出将被终端捕获并打印。
这似乎是,如果平被替换回声会发生什么:
echo 'PING' | grep -o 'PING' | grep -o 'IN'
IN
被打印到终端,如我期望的那样。
那么ping
有什么特别之处,可以防止打印任何东西?
了解grep的'--line-buffered'选项。它会解决你的问题 – RomanPerekhrest
尝试'ping -c 5',以便在5次尝试后停止。 –
@RomanPerekhrest谢谢!但我不确定为什么这个选项使它工作或如何推广解决方案。其他命令也存在这个问题,如perl:'ping google.com | perl -pe''| grep -o'IN'输出什么也没有,并且perl似乎没有相同的选项。 – Robz