Shell-Script
重定向到 pv 的實際工作原理是什麼?
我試圖了解重定向在此命令中的確切工作方式
# 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
?
請參閱什麼是 shell 的控制和重定向運算符?和背景的重定向順序。
tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)
告訴 shell 以
tar -czf - ./Downloads/
重定向到的標準輸出執行(pv -p --timer --rate --bytes > backup.tgz)
。(pv -p --timer --rate --bytes > backup.tgz)
告訴 shell
pv -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
.