Bash

進度條的不同行為:本地與遠端 ssh bash 腳本

  • March 23, 2020

我在通過 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。

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