J'écrivais donc ce petit script nautilus pour transcoder la vidéo en 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
Le problème est que, bien que la commande ffmpeg soit exécutée avec succès, if [ "$?" -eq 0 ]
ne semble pas se déclencher. Pourquoi donc? Est-ce &&
mal ou est-ce autre chose?
&&
commande ffmpeg, cela fonctionne réellement. J'ai encore une autre question, si ça va à cet endroit - est-il possible d'afficher la stdout et la stderr de ffmpeg quelque part sans utiliser de fenêtre de terminal? Comme dans zenity fe$()
construction dans une variable, puis passer cette variable àzenity
. Méfiez - vous citer, etzenity
dans mon expérience utilise Pango de sorte que vous devez remplacer<
,&
,>
avec<
,&
,>
respectivement.L'
exec command
instruction remplace le shell actuel parcommand
. Autrement dit, votre script se termine effectivement à la ligneexec ffmpeg ...
; les lignes restantes seront exécutées si et seulement si laffmpeg
commande n'est pas trouvée sur votre PATH (ou si elle ne peut pas être lancée pour d'autres raisons).Vous pouvez obtenir plus de détails sur le
exec
bash intégré en tapanthelp exec
à l'invite de commande bash:la source
Selon cela,
exec
le shell est remplacé par la commande que vous spécifiez. Ainsi, votre script ne parvient jamais aux commandes après leexec
.Tu n'as pas besoin
exec
. Spécifiez simplement la commande.la source
Vous pouvez conserver la
exec
commande si vous la mettez dans un sous-shell:la source
&&
encore tort?exec
?