GNU并行程序丢失pv进度输出



如果我使用GNU并行程序包装使用pv(管道查看器(命令的命令,它似乎会丢失命令的进度输出。

例如,如果我运行以下pv命令,它显示了我的gzip:的进度

› dd if=/dev/urandom bs=256m count=1 | (pv --progress -s 256m --bytes | gzip > /dev/null)
208MiB [=============================>                                                    ] 32%

它运行良好。但是,如果我用GNUparallel:包装相同的命令

parallel 'dd if=/dev/urandom bs={} count=1 | (pv --progress -s {} --bytes | gzip > /dev/null)' ::: 256m

我不再看到正在进行的gzip进度,而只看到最后的脚本输出。

问题:不确定是我的pv还是parallel出了问题,但如果我使用pv,有没有办法显示单个命令(Unix管道(的进度(而不是parallel --progress给出的作业进度(?

GNU并行程序将输出保存到临时文件中,并在作业完成后打印这些文件。所以它基本上是为每个命令运行这个:

(cmd; cmd) > tmp.out 2> tmp.err
cat tmp.out
cat tmp.err >&2

这就是您没有看到任何输出的原因。

可以要求GNU并行程序不使用临时文件,而只使用--line-buffer缓冲整行。这在这里不起作用,因为pv确实想要一个tty。

幸运的是,您还可以请求GNU并行程序将tty与--tty连接起来。GNU Parallel假设当你连接tty时,你只想运行一个作业(即--jobs 1(,但你可以覆盖它:

parallel -j2 --tty 'dd  if=/dev/urandom bs=1 count={} | (pv --progress -s {} --bytes | gzip > /dev/null)' ::: 20M 10M

相关内容

  • 没有找到相关文章

最新更新