进度条的不同行为:本地与远程 ssh 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 相同的问题

答案1

从手册页:

--progress=type
选择您要使用的进度指示器的类型。合法的指示符是“dot”和“bar”。

默认情况下使用“bar”指示器。它绘制一个 ASCII 进度条图形(又名“温度计”显示)来指示检索状态。 如果输出不是 TTY,则默认使用“点”栏。

第一个片段中的进度条是“bar”,第二个是“dot”。当您ssh使用命令行上给出的命令运行时,默认情况下它不会在远程端分配 tty,因此这可能是wget触发更改进度条样式的原因。

您可以使用wget --progress=bar:force强制它选择那种风格;或用于ssh -t告诉 SSH 客户端分配 TTY。

相关内容