M HYPE SPLASH
// updates

How to create a rotation animation using shell script?

By Sarah Scott

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?

3 Answers

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.

3

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.

2

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.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy