在 bash 脚本中,有时您需要用户等待几秒钟才能完成后台进程。
我通常使用例如:
sleep 10
如何在脚本中添加一种进度条,以便用户知道要等待多长时间?
我安装了命令bar
,但看不懂手册。
答案1
while true;do echo -n .;sleep 1;done &
sleep 10 # or do something else here
kill $!; trap 'kill $!' SIGTERM
echo done
这将启动一个无限 while 循环,每秒回显一个微调器,在后台执行。
运行您想要的任何命令,而不是命令sleep 10
。
当该命令完成执行时,这将杀死后台运行的最后一个作业(这是无限的 while 循环)
来源:https://stackoverflow.com/a/16348366/1069083
您可以使用各种 while 循环来代替,例如这样的微调器:
while :;do for s in / - \\ \|; do printf "\r$s";sleep 1;done;done
答案2
这应该足以让您开始:
#!/bin/bash
for i in {001..100}; do
sleep 1
printf "\r $i"
done
使用\r
转义序列将行返回到开头,没有换行符。这允许您更新输出而无需数百行输出。通过使用这个基础,您可以找到一种慢慢打印出箭头的方法,而=>25% ==>50% ===>75%
不是简单地打印出数字。您可以通过使用 if-then 逻辑根据数字的大小打印出特定数量的 = 来以非常基本的方式执行此操作。
答案3
这是一个使用光标移动这将重写该行以显示倒计时:
c=5 # seconds to wait
REWRITE="\e[25D\e[1A\e[K"
echo "Starting..."
while [ $c -gt 0 ]; do
c=$((c-1))
sleep 1
echo -e "${REWRITE}$c"
done
echo -e "${REWRITE}Done."
答案4
如果您想查看文件复制过程的进度,您可以简单地使用
pv source_file > destination_file
或者
rsync --progress source_file destination_file
而不是cp
命令