mirror of https://github.com/lework/script
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
1.7 KiB
91 lines
1.7 KiB
5 years ago
|
#!/bin/bash
|
||
|
# Shows a spinner while another command is running. Randomly picks one of 12 spinner styles.
|
||
|
# @args command to run (with any parameters) while showing a spinner.
|
||
|
# E.g. ‹spinner sleep 10›
|
||
|
|
||
|
function shutdown() {
|
||
|
tput cnorm # reset cursor
|
||
|
}
|
||
|
trap shutdown EXIT
|
||
|
|
||
|
function cursorBack() {
|
||
|
echo -en "\033[$1D"
|
||
|
}
|
||
|
|
||
|
function spinner() {
|
||
|
# make sure we use non-unicode character type locale
|
||
|
# (that way it works for any locale as long as the font supports the characters)
|
||
|
local LC_CTYPE=C
|
||
|
|
||
|
local pid=$1 # Process Id of the previous running command
|
||
|
|
||
|
case $(($RANDOM % 12)) in
|
||
|
0)
|
||
|
local spin='⠁⠂⠄⡀⢀⠠⠐⠈'
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
1)
|
||
|
local spin='-\|/'
|
||
|
local charwidth=1
|
||
|
;;
|
||
|
2)
|
||
|
local spin="▁▂▃▄▅▆▇█▇▆▅▄▃▂▁"
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
3)
|
||
|
local spin="▉▊▋▌▍▎▏▎▍▌▋▊▉"
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
4)
|
||
|
local spin='←↖↑↗→↘↓↙'
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
5)
|
||
|
local spin='▖▘▝▗'
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
6)
|
||
|
local spin='┤┘┴└├┌┬┐'
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
7)
|
||
|
local spin='◢◣◤◥'
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
8)
|
||
|
local spin='◰◳◲◱'
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
9)
|
||
|
local spin='◴◷◶◵'
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
10)
|
||
|
local spin='◐◓◑◒'
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
11)
|
||
|
local spin='⣾⣽⣻⢿⡿⣟⣯⣷'
|
||
|
local charwidth=3
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
local i=0
|
||
|
tput civis # cursor invisible
|
||
|
while kill -0 $pid 2>/dev/null; do
|
||
|
local i=$(((i + $charwidth) % ${#spin}))
|
||
|
printf "%s" "${spin:$i:$charwidth}"
|
||
|
|
||
|
cursorBack 1
|
||
|
sleep .1
|
||
|
done
|
||
|
tput cnorm
|
||
|
wait $pid # capture exit code
|
||
|
echo "123"
|
||
|
return $?
|
||
|
}
|
||
|
|
||
|
("$@") &
|
||
|
|
||
|
spinner $!
|