Você tem alguns problemas no script:
Como foi apontado nos comentários:
#!/usr/bin/env bash -e
provavelmente não passa a opção -e
para bash. Em vez disso, se você quiser, coloque set -e
abaixo dessa linha.
Próximo:
for video in ‘“*.mp4’; do
Primeiro, são aspas curvas ',' e 'em vez de aspas direitas' e '. Dependendo da fonte que você estiver usando, isso pode ser muito difícil de dizer. O Shell sempre usa Em segundo lugar, *.mp4
não deve ser cotado. A cotação impede a expansão e você deseja que *.mp4
seja expandido para todos os arquivos .mp4
no diretório.
A próxima linha também tem um erro, e esta é a que o shell está reclamando:
name="{video%.*}
Você está perdendo uma citação próxima.
O shell lhe disse isso, depois que você sabe ler as mensagens de erro. Primeiro, você precisa ter linhas numeradas - sugiro procurar uma opção no editor que mostre números de linha ou pule para uma linha por número. Para facilitar, vou colocá-los abaixo:
1 #!/usr/bin/env bash -e
2
3 function combine(){
4 ffmpeg -i "$1" -i "$2" -map 0:0 -map 1:0 -acodec libfdk_aac -b:a 192k -vcodec copy -shortest "$3"
5 }
6
7 for video in ‘“*.mp4’; do
8 name="{video%.*}
9 audio=${name}.aif
10 output=${name}_new.mp4
11 combine $audio $video $output
12 done
A chave para entender essa mensagem é saber que "EOF" significa "fim do arquivo". Então, basicamente, o shell encontrou um "
na linha 8. Ele continuou procurando pelo "
correspondente (para fechar a citação), mas em vez de encontrar um, encontrou o final do arquivo.
Existe outro problema:
combine $audio $video $output
Aqui, você deseja passar esses nomes de arquivos sem nenhuma expansão adicional ou divisão de palavras (caso contrário, os nomes de arquivos com espaços neles falharão). Então você precisa citar aqueles: combine "$audio" "$video" "$output"
.
Por fim, para depurar seu último problema: adicione um set -x
no topo. Isso fará com que os comandos que estão sendo executados sejam primeiro ecoados, para que você possa ver o que está acontecendo.
PS: Se você olhar para o seu código original da pergunta , ele não muitos desses problemas. Daí toda a confusão.
Encaracolado cita em todos os lugares
Você precisa que seu editor pare de inserir aspas inglesas para você.