免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4407 | 回复: 8
打印 上一主题 下一主题

请教一个难题,有关用shell实现进度条的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-20 21:15 |只看该作者 |倒序浏览
现在我想实现一个像windows下安装程序的进度条显示功能
比如实现一个反映当前程序执行程度的进度条
如果执行了10%则显示
10%[==                                 ]   (1)
如果执行了20%
20%[====                             ]   (2)
如果执行了30%则显示
30%[======                         ]   (3)
其中
这些进度条1,2,3是在同一行,也就是说除了显示百分比和=个数改变以外,其他的都没有变化
现在碰到的问题是如何擦除已经打印的内容,而又不会出现明显的擦除过程,让它看起来真的像是在同一行动态增长的?

高手们给点建议,先谢了

论坛徽章:
0
2 [报告]
发表于 2005-08-20 21:59 |只看该作者

请教一个难题,有关用shell实现进度条的

Try this, just a very very simple implemetation.


  1. #!/bin/sh

  2. echo
  3. for i in `seq 1 20`; do
  4.      arrow="$arrow="
  5.      echo -e "\e[A\e[0G$[i*5]% [$arrow>"
  6.      echo -e "\e[A\e[50G]"
  7.      sleep 1
  8. done
复制代码


注意以下转义字符的含义:
\e[A
\e[<位置>G<输出>


another improved script:

  1. #!/bin/sh

  2. message="Copying files to harddisk ..."
  3. length=${#message}
  4. echo $message
  5. for i in `seq 1 25`; do
  6.      arrow="$arrow++"
  7.      echo -e "\e[A\e[$[length+1]G $arrow=>"
  8.      echo -e "\e[A\e[84G$[i*4]%"
  9.      sleep 1
  10. done
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-08-21 01:17 |只看该作者

请教一个难题,有关用shell实现进度条的

不知道你是在什么平台下的,我的是在linux下,执行结果为

\e[A\e[0G$[i*5]% [============>
\e[A\e[50G]
\e[A\e[0G$[i*5]% [=============>
\e[A\e[50G]
\e[A\e[0G$[i*5]% [==============>
\e[A\e[50G]
\e[A\e[0G$[i*5]% [===============>
\e[A\e[50G]
\e[A\e[0G$[i*5]% [================>
\e[A\e[50G]
\e[A\e[0G$[i*5]% [=================>
\e[A\e[50G]
\e[A\e[0G$[i*5]% [==================>
\e[A\e[50G]
\e[A\e[0G$[i*5]% [===================>
\e[A\e[50G]
\e[A\e[0G$[i*5]% [====================>
\e[A\e[50G]
不认识你给的特殊字符的含义
请问怎么解决

论坛徽章:
0
4 [报告]
发表于 2005-08-21 01:46 |只看该作者

请教一个难题,有关用shell实现进度条的

谢谢2楼的关注,这个问题我已经解决了,可以用如下的方式实现
不过有点小bug:
#!/bin/sh

printf "\033[s";
printf "\033[?25h"
for i in `seq 1 20`; do
    printf "\033[u" ;
    printf "\033[K" ;
    arrow="$arrow="
    printf "$arrow>";   
    sleep 1
done

论坛徽章:
0
5 [报告]
发表于 2005-08-21 08:57 |只看该作者

请教一个难题,有关用shell实现进度条的

I use LFS/BLFS

可能和某些设置有关,你试试不用下面的写法,将\e换成 ESC的ASCII值(即先按Ctrl+V,然后按下ESC,将得到和^[类似的符号)

\e[A
\e[<位置>G<输出>

此外:运行时终端窗口宽度要大于90

论坛徽章:
0
6 [报告]
发表于 2005-08-22 12:52 |只看该作者

请教一个难题,有关用shell实现进度条的

我有一点疑问:显示的问题解决了
可是怎么用shell捕捉某进程的百分比呢,这可以实现吗?
又如何把捕捉到的百分比传递给显示,从而真正实现进度条问题?

论坛徽章:
0
7 [报告]
发表于 2005-08-22 14:28 |只看该作者

请教一个难题,有关用shell实现进度条的

除非进程主动报告进度,否则很难知道它在作甚么,更别说做了百分之几了

论坛徽章:
0
8 [报告]
发表于 2005-08-22 15:37 |只看该作者

请教一个难题,有关用shell实现进度条的

[quote]原帖由 "sakulagi"]除非进程主动报告进度,否则很难知道它在作甚么,更别说做了百分之几了[/quote 发表:


     关注
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP