In Linux,
sleep 10
It just hangs there for 10 seconds, I want to see some progress/status when sleeping, doable?
I don't want to use a for-loop to sleep 1 separately.
In Linux,
sleep 10
It just hangs there for 10 seconds, I want to see some progress/status when sleeping, doable?
I don't want to use a for-loop to sleep 1 separately.
Here is how I did waiting animation in my projects: sshto and kube-dialog
Color variables from here
XY(){ printf "\e[$2;${1}H$3"; }
cursor () {
case $1 in
on) stty echo; printf "$CON";;
off) stty -echo; printf "$COF";;
esac
}
x=$[COLUMNS/2-3]
y=$[ LINES/2-3]
sand=( ⠁ ⠂ ⠄ ' ' )
# { small digits }
sd=(₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉)
bs='⠴⠷⠦' # bottom sand pile
ts='⠖' # top sand pile
WAIT(){
clear; cursor off; i=0; start=$SECONDS
XY $[x-1] $y $UND$BLD$RED' '$DEF # _______
XY $[x-1] $[y+1] $RED'╲'$DIM$UND' '$DEF$red'╱'$DEF # ╲_____╱
XY $x $[y+2] $BLU'( '$BLD$WHT'•'$BLD$BLU')'$DEF # ( •)
XY $x $[y+3] $BLU' ╲'$YLW"$ts"$BLD$BLU'╱'$DEF # ╲⠖╱
XY $x $[y+4] $BLU" ╱$YLW${sand[$i]}$BLD$BLU╲"$DEF # ╱⠂╲
XY $x $[y+5] $BLU'('$YLW"$bs"$BLD$BLU')'$DEF # (⠴⠷⠦)
XY $[x-1] $[y+6] $RED'╱'$RED'‾‾‾‾‾'$BLD$RED'╲'$DEF # ╱‾‾‾‾‾╲
XY $[x-1] $[y+7] $DIM$RED'‾‾‾‾‾‾‾'$DEF # ‾‾‾‾‾‾‾
( while true; do sleep 0.07
printf -v counter "%03d" $[SECONDS-start]
small="${sd[${counter:0:1}]}${sd[${counter:1:1}]}${sd[${counter:2:1}]}"
XY $[x-1] $[y+1] $RED'╲'$DIM$UND" $small "$DEF$red'╱'$DEF
XY $x $[y+4] $BLU" ╱$YLW${sand[$i]}$BLD$BLU╲"$DEF
((i++)); (($i==${#sand[@]})) && i=0;
done ) & waiter=$!
}
Use it like this:
WAIT; sleep 10; GO
Animation looks like this:
Another good example of waiting animation can be found here