首页 > 解决方案 > 将 pv 输出 (stderr) 打印到文件

问题描述

如何将输出打印到文件中?例如:

timeout 5s dd if=/dev/random | pv -r > /dev/null
[ 505kiB/s]

速率线输出在我的五秒超时过程中“更新”。我试过了,但它不起作用(日志为空):

timeout 5s dd if=/dev/random | pv -r > /dev/null 2> rates.log

我相信这与回车有关,但一个小时后我被卡住了。理想情况下,每次打印一个新值时,我的日志文件会有多行:

[ 505kiB/s]
[ 498kiB/s]
[ 542kiB/s]
[ 513kiB/s]
[ 509kiB/s]

更新:

要将内容放入如上所述的文件中,我必须使用虽然我不确定为什么需要它(单独不起作用,如果没有文件将是空的):

timeout 5s dd if=/dev/random | pv -fr > /dev/null 2> >(stdbuf -oL tr '\r' '\n' > rates.log)

标签: pipestderrpv

解决方案


来自man pv

-f,--强制
强制输出。通常,如果标准错误不是终端, pv 将不会输出任何视觉显示。此选项强制它这样做。

由于rates.log不是终端,你需要做pv -fr而不是pv -r.


推荐阅读