执行此命令会在控制台上显示输出。但是,当输出通过管道传输到另一个命令时,它不起作用。见下文。
(pv -F $'%t %r %e\n' /dev/nvme0n1p1 | gzip -c >/run/test.img )
0:00:01 [25.2MiB/s] ETA 0:00:18
0:00:02 [23.7MiB/s] ETA 0:00:18
0:00:03 [ 100MiB/s] ETA 0:00:07
0:00:04 [ 199MiB/s] ETA 0:00:01
Run Code Online (Sandbox Code Playgroud)
现在请看下面相同的命令输出通过管道传输到另一个命令,并且它根本不显示任何内容。我已将 stderr 重定向到 stdout 并将其传递给 tr -d ,以便它可以删除“:[ ] ”字符。
(pv -F $'%t %r %e\n' /dev/nvme0n1p1 | gzip -c >/run/test.img ) 2>&1 | tr -d ':[]'
Run Code Online (Sandbox Code Playgroud)
见下文,相同的命令,但我没有将 stderr 重定向到 stdout,另外,如果我不将 stderr 重定向到 stdout,使用上面相同的命令,我不会得到所需的结果,见下文,使用 tr -d 删除以下内容字符“:[]”但不起作用。您可以看到 tr -d 命令被完全忽略。
(pv -F $'%t %r %e\n' /dev/nvme0n1p1 | gzip -c >/run/test.img ) | tr -d ':[]'
0:00:01 [25.2MiB/s] ETA 0:00:18
0:00:02 [23.7MiB/s] ETA 0:00:18
0:00:03 [ 100MiB/s] ETA 0:00:07
0:00:04 [ 199MiB/s] ETA 0:00:01
Run Code Online (Sandbox Code Playgroud)
我花了无数个小时来解决这个问题,在 stackexchange 和所有论坛上进行搜索,但我无法弄清楚如何解决这个问题。
我也尝试过使用文件描述符 2>&3 但仍然没有运气。
使用pv -f \xe2\x80\xa6
从man 1 pv
:
\n\n\n
-f
,--force
\n强制输出。通常,pv
如果标准错误不是终端,则不会输出任何视觉显示。此选项强制它这样做。
(pv -fF $\'%t %r %e\\n\' /dev/nvme0n1p1 | gzip -c >/run/test.img ) 2>&1 | tr -d \':[]\'\n
Run Code Online (Sandbox Code Playgroud)\n