读取dd命令的输出

reading the output from dd command

我正在使用脚本测试我的网络速度,为了计算平均速度,我需要读取每个 运行 的速度。

命令:

dd if=InputFile of=OutputFile bs=4096k

输出:

64+0 records in
64+0 records out
268435456 bytes (268 MB) copied, 1.8519 s, 145MB/s

问题是 dd 命令总是将输出打印到标准输出。我可以设法通过管道传输或将其写入文件,这样我就可以阅读 145MB/s

我试过以下几行:

dd if=InputFile of=OutputFile bs=4096k >> log.txt - 创建一个空文件并打印到标准输出

dd if=InputFile of=OutputFile bs=4096k | grep * - 失败

echo `dd if=InputFile of=OutputFile bs=4096k` # fails

你的问题是 dd 不是 打印输出到标准输出,而是 stderr.

您必须使用 2> ... 进行重定向,例如

dd if=/dev/zero of=/dev/null count=1 2> >( grep copied )

您还可以获取 dd 进程的 PID 并设置手表以根据您的喜好发送 USR1 信号。然后将其重定向到一个文件!!!!