使用dd命令读取输出

3

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

命令:

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命令总是将输出打印到标准输出(stdout)。我可以通过管道或将其写入文件来读取145MB/s的速率。
我尝试了以下命令行: - dd if=InputFile of=OutputFile bs=4096k >> log.txt - 创建一个空文件并打印到stdout。 - dd if=InputFile of=OutputFile bs=4096k | grep * - 失败。
echo `dd if=InputFile of=OutputFile bs=4096k` # fails

2
dd 将其消息写入标准错误。因此:dd ... 2>> log.txt - gniourf_gniourf
2个回答

4

您的问题在于dd命令并不会将输出打印到标准输出stdout,而是打印到标准错误stderr。

您需要使用重定向命令2> ...,例如:

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

或者更像是... | awk '/copied/ { print $1 }' - tripleee

1

你还可以获取dd进程的PID并设置一个监视器,以发送USR1信号到您喜欢的位置。然后将其重定向到文件中!!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接