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