在bash中替换屏幕上显示的行
在编写一些比较耗时的程序时,我经常需要在屏幕上显示一些进度信息。默认的echo在输出的时候,会将每一条进度信息换行显示,就像下面这样:
1for i in {1..3};do
2 sleep 1
3 echo "第$i次"
4done
5# 输出
6第1次
7第2次
8第3次
如果希望每次显示替换掉前一次显示,可以这样处理:
1for i in {1..3};do
2 sleep 1
3 echo -en "\r第$i次"
4done
-n
参数的作用是不在echo的结尾自动加入换行符,-e
参数的作用是对反斜杠字符进行转义。把它们用在一起,对输出文本中的 \r
进行了转义,相当于在上一行内容之后输入了一次回车,清空了当前行的显示。
下面的代码运行后,“倒计时完毕”字样会紧接在“第3次”之后,这个应该如何处理呢?
1for i in {1..3};do
2 sleep 1
3 echo -en "\r第$i次"
4done
5echo '倒计时完毕'
- 文章ID:1799
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/replace_last_line_on_screen_in_bash/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。