Existem vários problemas com esse script, mas o que está causando o problema específico é porque você está lendo de um canal (a saída de ls ).
1. Não analise ls
Use isso em vez
for currentSong in *; do
...
done
Além das inúmeras razões pelas quais você não deve analisar ls , o problema que você está vendo é porque STDIN está conectado à saída de ls . Então, quando você emite um read , ele não pode ler do terminal porque o STDIN não está conectado ao terminal.
2. Use mais citações
Você tem uma boa quantidade de citações espalhadas, mas ainda falta algumas. Principalmente apenas no cd .
cd "$musicPath"
também
case "$choice"
3. Não use backticks
O uso de backticks está ok às vezes. Eu os uso frequentemente na linha de comando, pois é mais rápido digitar do que $() . Mas, para scripts, é uma boa prática usar $() .
seconds="$(mdls "$currentSong"|sed -n '20p'|awk '{print $3}'|cut -d. -f1)"
4. mkdir
Seu mkdir gerará um erro (inofensivo, mas barulhento) se os diretórios já existirem. Adicione um -p lá, o que fará com que o mkdir silenciosamente não faça nada se já existir
mkdir -p ../Yes
Sim, há muitas armadilhas com o bash. Não tentando ser duro, apenas tentando quebrar maus hábitos.
Divirta-se: -)