在bash脚本中运行命令时显示进度条或微调器

时间:2015-08-21 20:33:41

标签: bash progress-bar

我有一个bash脚本,结尾如下:

trap "exit" INT
for ((i=0; i < $srccount; i++)); do
    echo -e "\"${src[$i]}\" will be synchronized to \"${dest[$i]}\""
    echo -e $'Press any key to continue or Ctrl+C to exit...\n' 
    read -rs -n1
    #show_progress_bar()
    rsync ${opt1} ${opt2} ${opt3} ${src[$i]} ${dest[$i]}
done

我需要一个命令或函数,例如show_progress_bar(),在.命令运行时每隔一秒在标准输出中放置rsync(一个点)(或// - \ |运行时以rsync顺序旋转)。 可能吗?我是否需要自己编写此类函数,或者是否有可用于此目的的脚本?

1 个答案:

答案 0 :(得分:0)

它不漂亮,但它有效:

~$ while true; do echo -n .; sleep 1; done & sleep 3; kill %-; wait; echo;
[1] 26255
...[1]+  Terminated              while true; do
    echo -n .; sleep 1;
done

(为你的实际工作交换“睡眠3”)

它的工作原理如下:

  • while循环作为后台作业运行。
  • 同时,你的工作(在我的例子中“睡3”)在前台运行。
  • 完成工作后,“kill% - ”会杀死echo循环。
  • 然后我们等待作业终止,并回复换行符,以防万一。
像我说的那样,它并不漂亮。并且可能有更好的方法来做到这一点。 :)

编辑:例如,就像这里的答案一样:Using BASH to display a progress (working) indicator