在新行上打印行更改(使用“\r”)而不是更新行

在新行上打印行更改(使用“\r”)而不是更新行

据我了解,很多程序动画化他们的命令行输出(stdoutstderr)带有\r回车符。例如,apt-get update将更新包下载百分比,或者docker-compose up将动画显示正在更新和/或启动的容器列表。当然还有数以千计的其他例子。

在此输入图像描述

我需要以下内容:对于每行更新,实际上在新行上重写此行。让我们以上面显示的 gif 为例,我想要类似的东西:

buntu-22.04.2-deskt   0%[                    ]  25,59M  11,5MB/s               
untu-22.04.2-deskto   0%[>                   ]  30,68M  11,5MB/s               
ntu-22.04.2-desktop   0%[>                   ]  35,21M  11,5MB/s       
tu-22.04.2-desktop-   0%[=>                  ]  40,47M  11,5MB/s       
...        

我怎样才能做到这一点?请注意,我希望它适用于任何使用此功能的程序。

我尝试过: command | tr '\r' '\n'但这没有用。

答案1

Curses 将只使用终端支持的任何内容。对于 Linux 和其他类 Unix 系统,它将使用 ANSI 序列。

例如,尝试printf "\033[17;62H"使用命令行。你会发现光标会转到第17行第62列。

如果你查看维基百科条目,ANSI 转义码并向下滚动到CSI (Control Sequence Introducer) sequences,您将看到您需要的内容。

我建议您查看整个页面,因为只要使用正确的字符序列,您就可以做很多事情。

相关内容