bash 中的进度条可视化等待时间

bash 中的进度条可视化等待时间

在 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命令

相关内容