UNIX 复制/下载进度状态更新



当我们scp文件从一台机器到另一台机器时。它为我们提供了进度状态,其中包括以下信息: percentage completedupload ratetime to finish .当您使用-O选项下载文件时,curl也会发生同样的事情。

我的问题:通常输出(STDOUT(本质上是静态的,但此状态栏会不断更新in-place。命令提示符如何实现此逻辑?

我的猜测:他们清除了行并再次重写,我正在寻找更多信息。(我可能是错的(。

通过使用回车符 (control-M( 而不是行之间的换行符非常简单地完成此操作。 您可以自己尝试:

echo -e 'abcdefrxxx'

其中r通常是如何在字符串中输入回车。 上述命令在您的终端上显示为xxxdef,因为回车移回行首,不下一行,覆盖开头的"ABC"。

您可以通过将输出捕获到文件中并查看数据来检查 scp 命令的这一点。例如:

script -c 'scp /a/very/big/file someremote:'

将创建一个带有进度行副本的文件typescript。您可以使用以下命令查看此文件中的控制字符

cat -vet typescript

这将回车符显示为^M,即控制-M,换行符显示为$

这通常是通过转义序列完成的,这些序列可以控制终端的不同功能。例如,请参阅 ANSI 转义代码。存在不同的库以可移植的方式处理这些:cursesncurses等,至少在类Unix世界中是这样。

最新更新