Então, eu estava escrevendo este pequeno script nautilus para transcodificar vídeo em 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
O problema é que, embora o comando ffmpeg seja executado com êxito, o if [ "$?" -eq 0 ]
parece não ser acionado. Por que é que? Está &&
errado ou é outra coisa?
&&
comando depois do ffmpeg ele realmente funciona. Ainda tenho mais uma pergunta, se estiver tudo bem neste local - existe uma maneira de exibir o stdout e o stderr do ffmpeg em algum lugar sem usar uma janela de terminal? Como em zenity fe$()
construção em uma variável e depois passar essa variável parazenity
. Atente para citar, ezenity
na minha experiência usa Pango então você precisa substituir<
,&
,>
com<
,&
,>
respectivamente.A
exec command
instrução substitui o shell atual porcommand
. Ou seja, seu script termina completamente na linhaexec ffmpeg ...
; as linhas restantes serão executadas se, e somente se, offmpeg
comando não for encontrado no seu PATH (ou não puder ser iniciado por outros motivos).Você pode obter mais detalhes sobre o
exec
bash embutido digitandohelp exec
no prompt de comando do bash:fonte
De acordo com isso,
exec
o shell é substituído pelo comando que você especificar. Portanto, seu script nunca está recebendo os comandos além doexec
.Você não precisa
exec
. Basta especificar o comando.fonte
Você pode manter o
exec
comando se o colocar em um subshell:fonte
&&
está errado lá?exec
?