Сценарий, не работающий при внешнем вызове

Я использую простой сценарий для создания .mp3s из .mp4 файлов:

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

Сценарий хорошо работает, когда выполнено от рабочего стола или названный через терминал. Когда сценарий называют из внешнего сценария однако, ему не удается работать, возвращаясь

"*.mp4: никакой такой файл или каталог".

Я подозреваю, что проблема с расширением оболочки, но не может перенести мою голову, как зафиксировать его в этой ситуации.

8
задан 5 January 2017 в 08:08

1 ответ

Вы используете относительный путь, где Ваш сценарий ищет эти .mp4 файлы в текущем каталоге т.е. каталоге от того, где скрипт запускается, и находя, что никакой такой .mp4 файл существует, затем он ищет литерал *.mp4 файл (принимающий nullglob / failglob, не установлен, который является значением по умолчанию), и тот файл не существует также, следовательно сообщение об ошибке *.mp4: No Such File or Directory.

, необходимо использовать полный путь вместо этого:

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

Замена /directory/ с фактическим путем к каталогу; если Вы хотите Вас, может взять имя каталога в качестве первого аргумента также:

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

можно использовать полный или относительный путь здесь, но снова полный путь всегда является более безопасной опцией.

Теперь называют исполняемый сценарий обычным способом:

/path/to/script.sh /directory

Из каталога сценария:

./script.sh /directory
13
ответ дан 23 November 2019 в 05:32

Другие вопросы по тегам:

Похожие вопросы: