所以,我知道通过使用“tee”,我可以将诸如“ping”之类的命令的输出重定向到标准输出以及文件。
例如:
> ping google.com | tee somefile
Run Code Online (Sandbox Code Playgroud)
这将在终端上显示 ping 统计信息并将它们写入“somefile”。
现在,如果我想修改“ping”的输出,我可以这样使用“cut”:
> ping google.com | cut -d' ' -f 1
Run Code Online (Sandbox Code Playgroud)
但是,如果我想同时使用所有三个命令,我会在 stdout 上得到一个无输出和一个空文件。
> ping google.com | cut -d' ' -f 1 | tee somefile
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?有一个更好的方法吗?不知何故,我觉得我没有正确使用“tee”。任何见解将不胜感激。
如果相关,我正在使用 bash shell。
Ste*_*nds 12
您的管道命令作为非终端目的地,正在缓冲您的输出。它最终会出现,但只有在大量输出建立或 ping 命令退出时才会出现。
您可以使用ping -c 5 google.com
设置要发送的特定数量的数据包,然后 ping 将退出。您的输出回来了,管道应该按预期工作。
编辑:另一种解决方法用于stdbuf
避免管道缓冲并awk
避免一些内部cut
缓冲并让 ping 连续运行:
ping www.google.com | stdbuf --output=0 awk '{print $1}' | tee /tmp/file
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2110 次 |
最近记录: |