mirror of https://github.com/lework/script
lework
5 years ago
2 changed files with 102 additions and 0 deletions
@ -0,0 +1,90 @@ |
|||||||
|
#!/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 $! |
Loading…
Reference in new issue