#! /usr/bin/bash spinner_pid= spinner() { local chars=('\' '|' '/' '-') local c while true; do for c in ${chars[@]}; do printf "<%s>\r" "${c}" sleep .2 done done } cleanup() { echo "done" if [[ -n ${spinner_pid} ]]; then kill "${spinner_pid}" fi echo "[$$] finished spinner" } main() { trap cleanup EXIT spinner & spinner_pid=$! if (( $# == 0)); then echo "Usage: spinner " return 1 fi "$@" } main "$@"