Also schrieb ich dieses kleine Nautilus-Skript zum Umcodieren von Videos in MP3:
#! /bin/bash -x
if [ -z "$1" ]
then
zenity --warning --text="Error - No file selected !"
exit 1
fi
BASEFILENAME=${1%.*}
exec ffmpeg -i "$1" -ab 256k "$BASEFILENAME.mp3" &&
if [ "$?" -eq 0 ]
then
zenity --info --text="Converting successful"
exit
fi
Das Problem ist, obwohl der Befehl ffmpeg erfolgreich ausgeführt wird if [ "$?" -eq 0 ]
scheint nicht ausgelöst zu werden. Warum ist das so? Ist das &&
falsch oder ist es etwas anderes?
&&
Befehl nach dem ffmpeg funktioniert es tatsächlich. Ich habe noch eine Frage, ob es an dieser Stelle in Ordnung ist - gibt es eine Möglichkeit, stdout und stderr von ffmpeg irgendwo anzuzeigen, ohne ein Terminalfenster zu verwenden? Wie in Zenity Fe$()
Konstrukt in eine Variable erfassen und diese Variable dann an übergebenzenity
. Achten Sie auf zitiert, undzenity
in meiner Erfahrung nutzt PanGo so Sie ersetzen müssen<
,&
,>
mit<
,&
,>
jeweils.Die
exec command
Anweisung ersetzt die aktuelle Shell durchcommand
. Das heißt, Ihr Skript endet tatsächlich in der Zeileexec ffmpeg ...
. Die verbleibenden Zeilen werden nur dann ausgeführt, wenn derffmpeg
Befehl in Ihrem PATH nicht gefunden wird (oder aus anderen Gründen nicht gestartet werden kann).Weitere Informationen zum integrierten
exec
Bash erhalten Sie, indem Siehelp exec
an der Bash-Eingabeaufforderung Folgendes eingeben :quelle
Demnach
exec
ersetzt die Shell den von Ihnen angegebenen Befehl. Ihr Skript gelangt also nie zu den Befehlen nach demexec
.Du brauchst nicht
exec
. Geben Sie einfach den Befehl an.quelle
Sie können den
exec
Befehl behalten, wenn Sie ihn in eine Subshell einfügen:quelle
&&
immer noch nicht falsch?exec
?