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, yzenityen mi experiencia utiliza PanGo por lo que necesita para reemplazar<,&,>con<,&,>respectivamente.La
exec commanddeclaració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 elffmpegcomando no se encuentra en su RUTA (o no se puede iniciar por otras razones).Puede obtener más detalles sobre el
execbash integrado escribiendohelp execen el símbolo del sistema bash:fuente
De acuerdo con esto,
execreemplaza 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
execcomando si lo coloca en una subshell:fuente
&&todavía mal allí?exec?