我想了解重定向是如何工作的这个命令
# tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)
英文翻译是什么?
的所有数据都tar
被重定向为输入pv
,然后pv
将其重定向到backup.tgz
?
那么为什么周围需要括号呢pv
?
那么这个重定向有什么意义呢?
tar -czf - ./Documents/ | (pv -n > backup.tgz) 2>&1 | dialog --gauge "Progress" 10 70
之后pv
是什么意思2>&1
?
答案1
看shell 的控制和重定向运算符是什么?和重定向顺序为背景。
tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)
告诉 shelltar -czf - ./Downloads/
以重定向到的标准输出运行(pv -p --timer --rate --bytes > backup.tgz)
。
(pv -p --timer --rate --bytes > backup.tgz)
告诉 shellpv -p --timer --rate --bytes
以连接到管道的标准输入运行tar
,并将标准输出重定向到backup.tgz
。由于tar
被告知创建一个压缩存档并输出到其标准输出 ( ),因此总体效果f -
是构建一个压缩存档,将其通过管道传输pv
,然后将pv
其写入到backup.tgz
。pv
显示一个进度条,随着数据流过它而更新。
括号不是必需的。
第二个命令更改第一个管道的后半部分:
(pv -n > backup.tgz) 2>&1
再次写入backup.tgz
,但也将子 shell 的(由括号引入的)标准错误重定向到标准输出,并提供那其中dialog
产生自己的进度显示。
如果按照命令中给出的顺序设置重定向,则此处需要括号:pv -n > backup.tgz 2>&1
会将pv
的标准输出和标准错误重定向到backup.tgz
,这不是您想要的。首先重定向标准错误也可以达到预期的效果:pv -n 2>&1 > backup.tgz
。