GNU parallel 丢失 pv 进度输出
GNU parallel loses pv progress output
似乎如果我使用 GNU Parallel 包装一个使用 pv
(管道查看器)命令的命令,它会丢失命令的进度输出。
例如,如果我 运行 下面的 pv
命令,它显示了我的 gzip 的进度:
› dd if=/dev/urandom bs=256m count=1 | (pv --progress -s 256m --bytes | gzip > /dev/null)
208MiB [=============================> ] 32%
...它工作正常。但是,如果我用 GNU parallel:
包装相同的命令
parallel 'dd if=/dev/urandom bs={} count=1 | (pv --progress -s {} --bytes | gzip > /dev/null)' ::: 256m
...我再也看不到正在进行的gzip进度了,最后只能看到最终的脚本输出。
问题:不确定是我的 pv
还是 parallel
的问题,但是有没有办法显示单个命令(Unix 管道)的进度(不是 [=16= 的作业进度) ] 给出)如果我使用 pv
?
GNU Parallel 将输出保存到临时文件,并在作业完成后打印这些文件。所以基本上每个命令都是 运行 这个:
(cmd; cmd) > tmp.out 2> tmp.err
cat tmp.out
cat tmp.err >&2
这就是您看不到任何输出的原因。
您可以 要求 GNU Parallel 不使用临时文件,而只用 --line-buffer
缓冲完整行。这在这里不起作用,因为 pv
真的想要一个 tty。
幸运的是,您还可以要求 GNU Parallel 将 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
似乎如果我使用 GNU Parallel 包装一个使用 pv
(管道查看器)命令的命令,它会丢失命令的进度输出。
例如,如果我 运行 下面的 pv
命令,它显示了我的 gzip 的进度:
› dd if=/dev/urandom bs=256m count=1 | (pv --progress -s 256m --bytes | gzip > /dev/null)
208MiB [=============================> ] 32%
...它工作正常。但是,如果我用 GNU parallel:
包装相同的命令parallel 'dd if=/dev/urandom bs={} count=1 | (pv --progress -s {} --bytes | gzip > /dev/null)' ::: 256m
...我再也看不到正在进行的gzip进度了,最后只能看到最终的脚本输出。
问题:不确定是我的 pv
还是 parallel
的问题,但是有没有办法显示单个命令(Unix 管道)的进度(不是 [=16= 的作业进度) ] 给出)如果我使用 pv
?
GNU Parallel 将输出保存到临时文件,并在作业完成后打印这些文件。所以基本上每个命令都是 运行 这个:
(cmd; cmd) > tmp.out 2> tmp.err
cat tmp.out
cat tmp.err >&2
这就是您看不到任何输出的原因。
您可以 要求 GNU Parallel 不使用临时文件,而只用 --line-buffer
缓冲完整行。这在这里不起作用,因为 pv
真的想要一个 tty。
幸运的是,您还可以要求 GNU Parallel 将 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