Skip to content

Instantly share code, notes, and snippets.

@gibatronic
Created April 11, 2016 13:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gibatronic/2307a2de757dd86dcab4bb4da95606f6 to your computer and use it in GitHub Desktop.
Save gibatronic/2307a2de757dd86dcab4bb4da95606f6 to your computer and use it in GitHub Desktop.
bash spinner for indefinite progress
#!/usr/bin/env bash
spinner_abort() {
[ -n "$SPINNER_PID" ] && kill $SPINNER_PID
echo -e '\033[?25h'
exit 0
}
spinner_loop() {
while true; do
let 'SPINNER_INDEX=++SPINNER_INDEX % SPINNER_LENGTH'
echo -en "${SPINNER_FRAMES[$SPINNER_INDEX]}\033[1D"
sleep 0.1
done
}
spinner_start() {
SPINNER_FRAMES=(⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏)
SPINNER_INDEX=0
SPINNER_LENGTH=${#SPINNER_FRAMES[@]}
trap spinner_abort SIGINT
echo -en '\033[?25l'
spinner_loop &
SPINNER_PID=$!
}
spinner_stop() {
kill $SPINNER_PID &> /dev/null
wait $SPINNER_PID &> /dev/null
echo -e '\033[?25h'
}
spinner_start
# do some work
sleep 2
spinner_stop
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment