Bash
進度條的不同行為:本地與遠端 ssh bash 腳本
我在通過 ssh 遠端執行的本地腳本中獲得最小進度條的問題。根據命令,我得到其他不需要的進度指示器(帶有 wget 的點線)或只是注意到(帶有 pv | tar)
讓我舉一個例子來說明我的意思:
wget -q --show-progress https://some.file -P /tmp some.file 11%[=========> ] 20,08M 4,47MB/s ETA 38s # Nice looking progress bar
遠端執行的同一行程式碼:
ssh user@server 'wget -q --show-progress https://some.file -P /tmp' 0K .......... .......... .......... .......... .......... 0% 1,43M 2m6s # Not so nice for longer scripts and big files 50K .......... .......... .......... .......... .......... 0% 1,73M 1m55s 100K .......... .......... .......... .......... .......... 0% 5,16M 88s 150K .......... .......... .......... .......... .......... 0% 2,56M 84s 200K .......... .......... .......... .......... .......... 0% 5,14M 74s 250K .......... .......... .......... .......... .......... 0% 5,36M 67s ... (etc)
我應該提到 curl 工作正常。但正如我所說,在使用 tar 提取時嘗試獲取任何類型的進度條時,我遇到了與 pv 相同的問題
從手冊頁:
--progress=type
選擇您希望使用的進度指示器的類型。法定指標是“點”和“條”。
預設情況下使用“條形”指標。它繪製一個 ASCII 進度條圖形(又名“溫度計”顯示),指示檢索狀態。 如果輸出不是 TTY,則預設使用“點”欄。
第一個片段中的進度條是“bar”,第二個是“dot”。當您
ssh
使用命令行上給出的命令執行時,預設情況下它不會在遠端端分配 tty,因此這可能是觸發wget
更改進度條樣式的原因。你可以用
wget --progress=bar:force
它來強制它保持這種風格;或用於ssh -t
告訴 SSH 客戶端分配一個 TTY。