How to create a rotation animation using shell script?
I am looking for a script that creates a rotation animation using character /
,-
, |
and \
.
If you continuously switch between these characters it should look like its rotating. How to make this?
Use that script:
#!/bin/bash
chars="/-\|"
while :; do
for (( i=0; i<${#chars}; i++ )); do
sleep 0.5
echo -en "${chars:$i:1}" "\r"
done
done
The while
loop runs infinite. The for
loop runs trough each character of the string given in $chars
. echo
prints the character, with a carriage return \r
, but without linebreak -n
. -e
forces echo to interpret escape sequences such as \r
.
There's a delay of 0.5 seconds between each change.
Here's an example using \b
, which tells the terminal emulator to move the cursor one column to the left, in order to keep overwriting the same character over and over.
#!/usr/bin/env bash
spinner() {
local i sp n
sp='/-\|'
n=${#sp}
printf ' '
while sleep 0.1; do
printf "%s\b" "${sp:i++%n:1}"
done
}
printf 'Doing important work '
spinner &
sleep 10 # sleeping for 10 seconds is important work
kill "$!" # kill the spinner
printf '\n'
See BashFAQ 34 for more.
Since you don't explicitly ask for bash, a little plug for the fish shell, where this can be solved beautifully IMO:
set -l symbols ◷ ◶ ◵ ◴
while sleep 0.5
echo -e -n "\b$symbols[1]"
set -l symbols $symbols[2..-1] $symbols[1]
end
In this case, symbols
is an array variable, and the contents if it are rotated/shifted, because $symbols[2..-1]
are all entries but the first.