在脚本或者程序运行时间较长时,为终端用户提供反馈信息,表示脚本或程序在辛勤工作,是非常重要的。本文将介绍常见的两种进度指示器(一系列原点和一条旋转线)以及一些其他提供进度指示的工具。
1. 使用一系列原点来指示进度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
dots函数每隔一段时间打印一个圆点,这个时间值可以通过第一个参数传入,否则默认为5秒。在后台启动dots函数之后,通过"$!"获取dots的pid,然后开始执行耗时的工作,在工作执行完毕之后kill掉后台执行的dots。trap命令是为了防止用户Ctrl_C中断脚本执行的时候dots仍然在后台执行。
2. 使用一条旋转线来表示进度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
为了使用一条旋转线来作为进度指示器,可以通过按顺序逐个显示/-\|然后重复这个过。为使这一字符序列无缝地显示,需要对前一个字符退格显示并删除它,或者用一个新字符来覆盖它,使得看起来好像一条线在旋转。
3、使用pv显示进度
pv(Pipe Viewer)可以显示通过管道的内容的数据通过量、数据通过速度、已用时间、估计剩余时间(ETA)、通过百分比等信息。在使用的时候,可以将pv插在两个进程的管道之间,并提供恰当的参数。比如为了查看tar备份的速度,可以用
1 |
|
为了查看cp的速度,可以用
1 |
|
4. 使用dialog显示进度
dialog是一种在shell脚本里显示对话框的工具,其提供的--gauge可以用来作为进度条使用,其中进度大小从标准输入读入。下面是一个简单的例子:
1 |
|
下面的脚本提供对cp进度的显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
5. 另一种对cp提供进度显示的方法
这种方法来自这里 ,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
原文地址:https://www.cnblogs.com/zhangrui153169/p/11508123.html