#!/bin/sh -eu prev2=-1 prev1=$prev2 index=$prev1 path="." mpv_opts="--no-video" while getopts hm:p: opt 2>/dev/null; do case "$opt" in m) mpv_opts="$mpv_opts $OPTARG" ;; p) path="$OPTARG" ;; h) echo "\ Usage: $0 [-h] [-m ] [-p ] Play audio files in a directory in (mostly) random order. Options: -m Pass as extra options to mpv -p Play files in instead of the current directory -h Print this help text " >&2 exit 0 ;; ?) echo "Usage: $0 [-h] [-m ] [-p ]" >&2 exit 1 ;; esac done while true; do files=$(find "$path" -type f) n=$(echo "$files" | wc -l) while [ $index -eq $prev2 ] || [ $index -eq $prev1 ]; do index=$((RANDOM % n)) done prev2=$prev1 prev1=$index echo "$files" | ( i=0 while read -r file; do if [ $i -eq $index ]; then echo "Playing $file" mpv $mpv_opts "$file" || true break fi i=$((i + 1)) done ) done