模拟一个微调器以获得Bash的进度

时间:2015-07-19 09:00:44

标签: linux bash unix

我目前正在学习如何使脚本更加冗长。下面的代码显示了一个微调器。但是,我很难修改这个微调器以获得诸如“下载”之类的单词。我希望单词和微调器彼此相邻。我不是问如何实现微调器的进展,而是如何与单词连接。怎么能实现这个目标?

sp='/-\|'
sc=0
spin() {
   printf "\b${sp:sc++:1}"
   ((sc==${#sp})) && sc=0
}
endspin() {
   printf "\r%s\n" "$@"
}

until work_done; do
   spin
   some_work ...
done
endspin

2 个答案:

答案 0 :(得分:5)

你可以这样做

sp='/-\|'
sc=0
spin() {
   printf "\r${sp:sc++:1} $1"
   ((sc==${#sp})) && sc=0
}
endspin() {
   printf "\r%s\n" "$@"
}
work_done() {
   false
}
some_work() {
   sleep 1
}

until work_done; do
   spin "Downloading"
   some_work ...
done
endspin

答案 1 :(得分:2)

虽然我很佩服Ed和Jakuje的DIY精神,但我也想重用其他人的代码。如果你宁愿回收而不是重新创建,请考虑Louis Marascio's spinner。我将他的spinner()函数放入我的shell库中,它很容易使用:

#!/bin/bash

. lib.sh

run_10s &

echo -n wait
spinner $!

echo -e "\rdone"

显示器

$ ./test_lib
wait [/]
旋转器旋转

10秒钟,然后用wait清除包含\r的那条线,你只剩下

$ ./test_lib
done
$

在屏幕上。