Używam prostego skryptu do tworzenia plików .mp3 z plików .mp4:
#!/bin/bash
for i in *.mp4
do
ffmpeg -i "$i" -ab 128k "${i%mp4}mp3"
done
Skrypt działa poprawnie, gdy jest uruchamiany z pulpitu lub wywoływany przez terminal. Jednak, gdy skrypt jest wywoływany ze skryptu zewnętrznego, nie działa, wracając
„* .mp4: Brak takiego pliku lub katalogu”.
Podejrzewam, że problem dotyczy rozszerzenia powłoki, ale nie mogę się zastanowić, jak to naprawić w tej sytuacji.
*.mp4
do żadnego pliku, uważa go za dosłowną nazwę pliku i próbuje otworzyć plik o nazwie*.mp4
(która jest prawidłową nazwą pliku) i kończy się niepowodzeniem, ponieważ nie masz pliku wywoływane*.mp4
w bieżącym katalogu. Ktoś mógłby pomyśleć, że*.mp4
zawsze rozwija się do listy pasujących nazw plików, która może być pusta (iw takim przypadkufor
pętla nic nie robi, ale nie zostaną zgłoszone żadne błędy), tak nie jest:*.mp4
zawsze rozwija się do czegoś.bash
), ale nie zawsze; spójrz nanullglob
/failglob
.