Files
bash-tut/spinner.sh
2026-01-09 13:42:29 +01:00

47 lines
581 B
Bash
Executable File

#! /usr/bin/bash
spinner_pid=
usage() {
local name=${0##*/}
cat <<-EOF
Usage: ${name} {options] <cmd>
Run a command with an animated spinner.
EOF
}
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
usage >&2
return 1
fi
"$@"
}
main "$@"