The following bash-function is displaying a spinner as long as data can be read from stdin, for example reading from pipe. In the moment the stdin stream is closed, the spinner will terminate.
Credits: It is a modification of the spinner of http://fitnr.com/showing-a-bash-spinner.html
#!/bin/bash
spinner()
{
## hide the cursor
tput civis
local spinstr='|/-\'
printf " [%c] " "$spinstr"
while read -N 30 chunk; do
printf "\b\b\b\b\b\b"
local temp=${spinstr#?}
local spinstr=$temp${spinstr%"$temp"}
printf " [%c] " "$spinstr"
done
## overwrite the spinner
printf "\b\b\b\b\b\b "
## return to original cursor position
printf "\b\b\b\b\b\b"
## unhide the cursor
tput cnorm
}
This spinner can be used to display a progress when performing an untar or to show activity in syslog file:
tail -f /var/log/syslog | spinner