Eu uso um script simples para criar .mp3s a partir de arquivos .mp4:
#!/bin/bash
for i in *.mp4
do
ffmpeg -i "$i" -ab 128k "${i%mp4}mp3"
done
O script funciona bem quando executado na área de trabalho ou chamado através do terminal. Quando o script é chamado de um script externo, no entanto, ele falha na execução, retornando
"* .mp4: Esse arquivo ou diretório não existe".
Eu suspeito que o problema esteja relacionado à expansão do shell, mas não consigo entender como corrigi-lo nessa situação.
*.mp4
a nenhum arquivo, ele é considerado um nome de arquivo literal e tenta abrir o arquivo chamado*.mp4
(que é um nome de arquivo válido) e falha porque você não possui nenhum arquivo. chamado*.mp4
no diretório atual. Alguém poderia pensar que*.mp4
sempre se expandirá para a lista de nomes de arquivos correspondentes, que poderiam estar vazios (e nesse caso ofor
loop não faria nada, mas nenhum erro seria gerado), esse não é o caso:*.mp4
sempre se expande para algo.bash
), mas nem sempre; olhe paranullglob
/failglob
.