据我了解,很多程序动画化他们的命令行输出(stdout
或stderr
)带有\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
,您将看到您需要的内容。
我建议您查看整个页面,因为只要使用正确的字符序列,您就可以做很多事情。