mirror of https://github.com/lework/script
lework
5 years ago
2 changed files with 102 additions and 0 deletions
@ -0,0 +1,90 @@
@@ -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