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: -)