it-swarm.com.de

Skript funktioniert nicht, wenn es extern aufgerufen wird

Ich benutze ein einfaches Skript, um MP3s aus MP4-Dateien zu erstellen:

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

Das Skript wird ordnungsgemäß ausgeführt, wenn es vom Desktop ausgeführt oder über das Terminal aufgerufen wird. Wenn das Skript jedoch von einem externen Skript aufgerufen wird, kann es nicht ausgeführt werden und kehrt zurück

msgstr "* .mp4: Keine solche Datei oder kein solches Verzeichnis".

Ich vermute, dass das Problem bei der Shell-Erweiterung liegt, kann mich aber nicht darum kümmern, wie das Problem in dieser Situation behoben werden kann.

8
M. Street

Sie verwenden einen relativen Pfad, in dem Ihr Skript nach den .mp4 -Dateien im aktuellen Verzeichnis sucht, dh dem Verzeichnis, in dem das Skript ausgeführt wird, und feststellen, dass keine solche .mp4 -Datei vorhanden ist sucht nach einer wörtlichen *.mp4 -Datei (vorausgesetzt, nullglob/failglob ist nicht festgelegt, was die Standardeinstellung ist), und diese Datei existiert auch nicht, daher die Fehlermeldung *.mp4: No Such File or Directory .

Sie sollten stattdessen den absoluten Pfad verwenden:

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

Ersetzen Sie /directory/ durch den tatsächlichen Verzeichnispfad. Wenn Sie möchten, können Sie auch den Verzeichnisnamen als erstes Argument verwenden:

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

Sie können hier den absoluten oder relativen Pfad verwenden, aber auch hier ist der absolute Pfad immer die sicherere Option.

Rufen Sie nun das ausführbare Skript wie gewohnt auf:

/path/to/script.sh /directory

Aus dem Skriptverzeichnis:

./script.sh /directory
13
heemayl