Die Bedeutung von #!/bin/sh
Dies liegt daran, Sie #!/bin/sh
in Ihrem Skript verwenden, als fix Sie es #!/bin/bash
ändern sollte.
#!/bin/bash
for i in *.mp4
do
ffmpeg -i "$i" "${i/.mp4/.mp3}"
done
Menschen verwenden #!/bin/sh
, wenn die nur eine begrenzte Anzahl an Funktionen verwenden (durch den Standard POSIX definiert) für maximale Portabilität. #!/bin/bash
ist perfekt für Benutzer-Skripts. /bin/sh
ist normalerweise mit einer minimalen POSIX-kompatiblen Shell oder mit einer Standard-Shell (z. B. bash) verknüpft. Im letzteren Fall wird im Kompatibilitätsmodus bash ausgeführt, die in den manpage erklärt:
Wenn bash mit dem Namen sh aufgerufen wird, versucht er, das Startverhalten der historischen Versionen von sh zu imitieren so eng wie möglich, auch nach dem POSIX-Standard.
Empfohlene Änderungen an Ihrem Skript:
- Es ist gute Praxis betrachtet Anführungszeichen um Variablen zu verwenden (
"$i"
statt $i
). Angegebene Variablen verhindern Probleme, wenn der gespeicherte Dateiname Leerzeichen enthält.
- Ich mag, dass Sie erweiterte parameter expansion verwenden. Ich schlage vor,
"${i%.mp4}.mp3"
(anstelle von "${i/.mp4/.mp3}"
) zu verwenden, da ${parameter%word}
nur am Ende ersetzt (zum Beispiel eine Datei mit dem Namen foo.mp4.backup
).
Verwenden Sie #!/Bin/sh oder #!/Bin/bash aus dem Skript? –
In der Konsole wurden die Befehle von 'bash' Shell ausgeführt. Wenn Sie '#!/Bin/sh' in Ihrem Skript verwenden, versucht die' sh' Shell auszuführen und daher der Fehler. – jitendra
Ich schrieb #!/Bin/sh in der ersten Zeile ... – WhatIsName