shell最简单的办法实现进度条

一直很好奇shell命令行安装脚本的时候怎么实现自动增长进度条而且不增加新输出的问题。以前一直觉得是不断print出来东西,但是已经输出到命令行终端的为什么也能被覆盖呢,于是看到别人写的进度条,不断尝试,发现核心功能非常简单,就是不断的printf "\r"

代码如下

复制代码
#!/bin/bash

processBar()
{
    process=$1
    whole=$2
    printf "[%03d/%03d]\r" $process $whole
}

whole=100
process=0
while [ $process -lt $whole ] 
do
    let process++
    processBar $process $whole
    sleep 0.1
done
printf "\n"
复制代码

然后我做了非常简单版本的核心代码

复制代码
#!/bin/bash
printf "1\r"
sleep 1
printf "2\r"
sleep 1
printf "3\r"
sleep 1
printf "4\r"
sleep 1
printf "5\r"
sleep 1
复制代码

我发现这样也能从 1 一直变到 5 。很让人费解这里面的原理是什么。

我看了一下 shell printf 解释参数中 \r 是回车的意思,至今还没搞懂是为什么。有网友明白的可以给我留言答疑解惑,不甚感激!

 后续更新(2020-05-22)

五分钟后 我好像有点眉目了

这个打印换行把刚刚输出的东西覆盖了,如果调换\r和数字顺序 发现后面的覆盖前面的最后留下来5,就是用回车进行覆盖,实现动态变化输出

posted @   李照耀  阅读(2543)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示