Shell-Script

重定向到 pv 的實際工作原理是什麼?

  • June 15, 2021

我試圖了解重定向在此命令中的確切工作方式

# 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)

告訴 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.

引用自:https://unix.stackexchange.com/questions/654260