Script não funciona quando chamado externamente

8

Eu uso um script simples para criar arquivos .mp3 de arquivos .mp4:

#!/bin/bash
for i in *.mp4
do
ffmpeg -i "$i" -ab 128k "${i%mp4}mp3"
done

O script é executado corretamente quando executado na área de trabalho ou chamado pelo terminal. Quando o script é chamado de um script externo, ele não é executado, retornando

  

"*. mp4: nenhum arquivo ou diretório desse tipo".

Eu suspeito que o problema é com a expansão do shell, mas não consigo entender como corrigi-lo nessa situação.

    
por M. Street 05.01.2017 / 15:55

1 resposta

13

Você está usando um caminho relativo, em que seu script está procurando os arquivos .mp4 no diretório atual, isto é, o diretório de onde o script está sendo executado e descobrindo que nenhum arquivo .mp4 existe. para um arquivo *.mp4 literal (assumindo que nullglob / failglob não está definido, que é o padrão), e esse arquivo não existe também, daí a mensagem de erro *.mp4: No Such File or Directory .

Você deve usar o caminho absoluto:

for i in /directory/*.mp4; do ...; done

Substitua /directory/ pelo caminho real do diretório; se você quiser, pode pegar o nome do diretório como primeiro argumento também:

for i in ""/*.mp4; do ...; done

Você pode usar o caminho absoluto ou relativo aqui, mas novamente o caminho absoluto é sempre a opção mais segura.

Agora, chame o script executável da maneira usual:

/path/to/script.sh /directory

Do diretório de script:

./script.sh /directory
    
por heemayl 05.01.2017 / 16:04

Tags