#! /bin/bash proc_is_running() { ps aux | grep -v grep | awk '{print $2}' | grep ^"$1"$ &> /dev/null } block_proc() { local pid="$1" local limit="${TIMEOUT:-100}" deadline=$(($(date +%s) + limit)) while [ $(date +%s) -lt $deadline ] && proc_is_running "$pid"; do sleep 1 done kill -9 "$pid" &> /dev/null } main() { cleanup() { kill -9 $(jobs -p) killall afplay mpv } trap cleanup EXIT for f in ./script.d/*.wav; do if [ "$#" != "0" ]; then eval "$1" else read -p "enter to play <$f>" fi mpv --no-video "$f" & export pid=${!} block_proc $pid done } main "$@"