光伏发电如何运作?

光伏发电如何运作?

下面的命令是如何工作的?

pv file.tar.gz | tar -xz

根据我的理解,管道运算符|创建了 a pipe,并且stdoutofpv映射到O_WRONLY管道的末尾,并且tar'sstdin映射到 ,O_RDONLY并且O_WRONLYO_RDONLY都存在于pipefs

这一切都很好,但以下内容正在打印到我的屏幕上:

31.1MiB 0:00:05 [6.17MiB/s] [===================================>] 100%

据我所知,这个进度条不是由生成的,tar因为如果是的话,可以通过一个选项来使用它,而我不需要pv,因此pv必须生成它。但如何呢? pvstdout映射到O_WRONLY.

我还读到一些 shell 使用插座对用于代替pipefs和的管道插座对是双向的。但这似乎会捆绑stdin两个stdout命令,直到一个或两个命令完成。上例中的情况并非如此,因为进度条会实时更新。

答案1

进度条是 的一个功能pv,它是写在标准错误上的。从pv手册中:

pv 通过提供诸如已用时间、完成百分比(带进度条)、当前吞吐量、传输的总数据和预计到达时间等信息来显示数据通过管道的进度。

要使用它,请将其插入两个进程之间的管道中,并使用适当的选项。其标准输入将传递到其标准输出,并且进度将显示在标准错误上。

不过,在重定向标准输出和标准错误的同时写入 TTY 确实没有问题:

$ ( echo "out"; echo "error" >&2; echo "hi there" >$(tty) ) 2>&1 | cat >file
hi there

$ cat file
out
error

另外,O_WRONLYandO_RDONLY不是名词而是形容词。标准输出是只写的,标准输入是只读的。

相关内容