我想在 bash 脚本中添加一个显示“.”的进度条。字符作为进度,并且过程在 MAX 180 秒后结束
在bash脚本中我使用curl命令,因此curl在一段时间后给出结果,但不超过180秒
类似的东西
|. after 2 sec
|........... after 60 sec
|................... after 100 sec
|.......................... after 150 sec
|................................| after 180 sec
最后的例子
|................................| after 180 sec
或者
|....| after 30 sec
答案1
在普通的 Bash 中做到这一点相当简单:
#!/bin/bash
# progress bar function
prog() {
local w=80 p=$1; shift
# create a string of spaces, then change them to dots
printf -v dots "%*s" "$(( $p*$w/100 ))" ""; dots=${dots// /.};
# print those dots on a fixed-width space plus the percentage etc.
printf "\r\e[K|%-*s| %3d %% %s" "$w" "$dots" "$p" "$*";
}
# test loop
for x in {1..100} ; do
prog "$x" still working...
sleep .1 # do some work here
done ; echo
第一个参数prog
是百分比,其他任何参数都打印在进度条之后。w
函数中的变量控制条形的宽度。完成后打印换行符,该函数不打印换行符。
另一种可能性是使用该pv
工具。它的目的是测量管道的吞吐量,但我们可以为其创建一个:
for x in {1..100} ; do
sleep .1 # do some work here
printf .
done | pv -pt -i0.2 -s100 -w 80 > /dev/null
在这里,-pt
启用进度条和计时器,-s 100
设置总输出大小,并且我们在函数内打印的任何内容都会根据该大小进行计数。
答案2
一般来说,您可以通过覆盖一行来实现这一点。用于\r
返回到行的开头而不写入\n
终端。
当你完成后写下\n
推进线。
用于echo -ne
:
- 不打印
\n
并且 - 识别转义序列,例如
\r.
这是一个演示:
echo -ne '... (33%)\r'
sleep 1
echo -ne '...... (66%)\r'
sleep 1
echo -ne '.......... (100%)\r'
echo -ne '\n'
编辑:现在,cURL 带有一个进度条:--progress-bar
,这不是你想要的吗?
取自答案https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script
发现用Google,第一个答案,搜索词如下:“bash进度条”