我想了解重定向是如何運作的這個命令
# 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
。