Entonces estaba escribiendo este pequeño script nautilus para transcodificar video a 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
El problema es que, aunque el comando ffmpeg se ejecuta correctamente, el if [ "$?" -eq 0 ]
Parece que no se activa. ¿Porqué es eso? ¿Está &&
mal o es algo más?
&&
comando after ffmpeg, realmente funciona. Todavía tengo una pregunta más, si está bien en este lugar, ¿hay alguna manera de mostrar stdout y stderr de ffmpeg en algún lugar sin usar una ventana de terminal? Como en zenity fe$()
construcción en una variable, luego pasar esa variable azenity
. Cuidado con los citando, yzenity
en mi experiencia utiliza PanGo por lo que necesita para reemplazar<
,&
,>
con<
,&
,>
respectivamente.La
exec command
declaración reemplaza el shell actual concommand
. Es decir, su secuencia de comandos termina realmente en la líneaexec ffmpeg ...
; las líneas restantes se ejecutarían si y solo si elffmpeg
comando no se encuentra en su RUTA (o no se puede iniciar por otras razones).Puede obtener más detalles sobre el
exec
bash integrado escribiendohelp exec
en el símbolo del sistema bash:fuente
De acuerdo con esto,
exec
reemplaza el shell con el comando que especifique. Por lo tanto, su secuencia de comandos nunca llega a los comandos más allá delexec
.No es necesario
exec
. Solo especifique el comando.fuente
Puede mantener el
exec
comando si lo coloca en una subshell:fuente
&&
todavía mal allí?exec
?