重定向pv的输出以进行进一步处理

时间:2013-08-02 01:53:43

标签: bash redirect

我正在尝试重定向pv命令的stderr并使用tr处理它:

(dd if=/dev/zero | pv -f -r > /dev/null) 2>&1 | tr "\r" "\n"

(dd只是一个例子),这段代码非常好(输出就像

[ 189MB/s] 
[ 188MB/s] 
[ 186MB/s] 
[ 180MB/s]

)但问题是放置“|”或“>”重定向它导致没有任何流到目标文件或管道。我想进一步处理这个输出,但我不知道为什么会这样,以及如何解决这个问题。有谁有任何线索?

2 个答案:

答案 0 :(得分:0)

您正在stdout/dev/null生根,然后尝试将其传递给tr。此时输出已经丢失。摆脱> /dev/null - 部分

答案 1 :(得分:0)

怎么样:

dd if=/dev/zero | pv -f -r 2> >(tr "\r" "\n") >/dev/null 

编辑:

由于OP想要处理tr(stv的stderr)的输出,这可以帮助:

dd if=/dev/zero | pv -f -r 2>&1 >/dev/null | tr "\r" "\n" | your_process_command

它将stderr重定向到stdout& stdout到/ dev / null。因此带宽数据在stdout上,然后被送到tr。

EDIT2:
抱歉,编辑也无效。我会尽力找到更好的方法和更新它....