Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: vampire_thunder em 05 de Maio de 2011, 14:43
-
Pergunta difícil, mas lá vai:
Estou tentando converter um script que usa kdialog (KDE) para zenity (GTK).
Já mudei quase tudo, adaptando os diálogos do kdialog para o zenity, mas chegou numa parte que não estou conseguindo avançar. É a seguinte:
dcopRef=$(kdialog --title $"mencoder" --progressbar $"Iniciando..." 12 2> /dev/null)
qdbus $dcopRef org.freedesktop.DBus.Properties.Set org.kde.kdialog.ProgressDialog maximum 100 2> /dev/null
qdbus $dcopRef org.kde.kdialog.ProgressDialog.showCancelButton true 2> /dev/null
A primeira linha substituí por essa:
dcopRef=$(zenity --progress --title $"Mencoder" --text $"Iniciando..." 12 2> /dev/null)
O problema são as outras. Fiquei um bom tempo no Google mas não encontrei nada equivalente ao "org.kde.kdialog.ProgressDialog" para o zenity. O máximo que percebi foi que eu devo usar o dbus-send no lugar do qdbus.
Alguém sabe?
Outro problema que estou tendo é com a função de seleção de arquivos. No kdialog é assim:
kdialog --multiple --separate-output --getopenfilename
Substituí por isso:
zenity --file-selection --multiple
Acontece que no kdialog, o parâmtro --separate-output divide os múltiplos arquivos em uma lista, um embaixo do outro, enquanto no zenity não tem essa opção e os nomes dos arquivos ficam um do lado do outro, na mesma linha. Como faço para burlar isso?
-
Se colocar o código original - inteiro - a coisa fica mais fácil, ou pelo menos informa o que o programa deveria fazer (as vezes a única forma é escrever do zero).
---
Olhe: http://linuxlibrary.org/index.php/command-line/zenity-simple-gui-creation-tool/
-
Os comandos do zenity e do kdialog eu li no --help-all. A questão mora no dbus, que não sei nada (eu também não sabia os do zenity) e não consigo encontrar. Acredito que eu realmente não esteja sabendo procurar, porque provavelmente deve ter muita diferença entre o qdbus e o dbus-send (ou outro), o que deve diferenciar o org.freedesktop presente no comando.
No entanto, nas pesquisas que fiz encontrei esse script:
http://svn.dmdirc.com/trunk/installer/linux/progressbar.sh
Dando uma olhada nele, vi que o org. alguma coisa só aparece quando usa o kdialog. Quando usa o zenity não aparece. Então talvez eu nem precise desse monte de parâmetros.
Se colocar o código original - inteiro - a coisa fica mais fácil, ou pelo menos informa o que o programa deveria fazer (as vezes a única forma é escrever do zero).
---
Olhe: http://linuxlibrary.org/index.php/command-line/zenity-simple-gui-creation-tool/
O programa é o Big Converter, do Big Linux, que é um frontend do mencoder. Achei no svn deles uma versão mais antiga. Não sei se teve mudanças, mas basicamente é isso:
http://biglinux.googlecode.com/svn/trunk/karmic/bigcontrolcenter-others-convert/usr/share/bigcontrolcenter/categories/others/bigconvert/submit.sh.htm
-
Só serve pra mostrar uma barra de progresso. O mencoder informa isso? Se sim basta passar por um pipe.
-
Só serve pra mostrar uma barra de progresso. O mencoder informa isso? Se sim basta passar por um pipe.
Não sei bem se ele informa. O que ele faz realmente é mostrar uma saída de 4 em 4 milésimos de segundos com o progresso até a conversão acabar:
(https://ubuntuforum-br.org/proxy.php?request=http%3A%2F%2Fimg843.imageshack.us%2Fimg843%2F6784%2Fcapturadetelaterminal.th.png&hash=8444c35ad4771e44d0ccd2040d14c40ce62ee5b9) (http://img843.imageshack.us/i/capturadetelaterminal.png/)
O script, então, joga isso para um log: "> /tmp/mencoder-log$$ 2> /dev/null"
e nessa parte faz a leitura para atualizar a barra:
(...)
#Adiciona mais dados sobre a barra de progresso
qdbus $dcopRef org.kde.kdialog.ProgressDialog.setLabelText " Convertendo, aguarde por favor.
$(sed '$!d;s/(.*)//;s/A.*//;s/V//' /tmp/mencoder-log$$)"
#Faz a leitura do Log e atualiza a barra de progresso
qdbus $dcopRef org.freedesktop.DBus.Properties.Set org.kde.kdialog.ProgressDialog value $(sed '$!d;s/.*(//; s/%.*//' /tmp/mencoder-log$$)
O resultado:
(https://ubuntuforum-br.org/proxy.php?request=http%3A%2F%2Fimg709.imageshack.us%2Fimg709%2F8969%2Fcapturadetela3u.th.png&hash=4ed93394f70873f50b1246cb47e591700ee91881) (http://img709.imageshack.us/i/capturadetela3u.png/)
O zenity com o comando "--progress --percentage=" mostra a porcentagem a partir do número mencionado, mas não continua a encher automaticamente.
-
Você pode tirar o "--percentage=", você só precisa passar a porcentagem pro zenity, ex:
(
echo "00"; sleep 1
echo "33"; sleep 1
echo "66"; sleep 1
echo "100"
) |
zenity --progress --title="Aguarde..."
Se for pra seguir o original, uma saída é ler o arquivo enquanto o mencoder existe, algo como
while [ -n "`mencoder`" ] ; do
cat /tmp/mencoder-log | filtro | zenity --progress --title="Aguarde..."
done
O "filtro" é a remoção de qualquer coisa diferente da porcentagem.
-
Você pode tirar o "--percentage=", você só precisa passar a porcentagem pro zenity, ex:
(
echo "00"; sleep 1
echo "33"; sleep 1
echo "66"; sleep 1
echo "100"
) |
zenity --progress --title="Aguarde..."
Se for pra seguir o original, uma saída é ler o arquivo enquanto o mencoder existe, algo como
while [ -n "`mencoder`" ] ; do
cat /tmp/mencoder-log | filtro | zenity --progress --title="Aguarde..."
done
O "filtro" é a remoção de qualquer coisa diferente da porcentagem.
Humm...
E como poderia ser esse filtro?
Tentei colocar o que já tinha no script:
cat /tmp/mencoder-log$$ | sed '$!d;s/(.*)//;s/A.*//;s/V//' /tmp/mencoder-log$$ | zenity --progress --title "Aguarde..."
Não funcionou. Ficou uma janela com um botão OK na tela direto. Eu dava OK e ela reaparecia, mesmo depois da conversão concluída.
Então tive a ideia de jogar o filtro para dentro do zenity:
cat /tmp/mencoder-log$$ | zenity --progress --title "Aguarde..." --text $(sed '$!d;s/(.*)//;s/A.*//;s/V//' /tmp/mencoder-log$$)
Também não deu certo, porque dá erro no sed.
Então gerei outro log só com a saída e tentei inseri-lo no zenity:
cat /tmp/mencoder-log$$ | sed '$!d;s/(.*)//;s/A.*//;s/V//' /tmp/mencoder-log$$ > /tmp/mencoder-percent$$ 2> /dev/null | zenity --progress --title "Aguarde..." --text $(cat /tmp/mencoder-percent$$)
E também não funcionou :-\
Já a primeira opção, só funcionaria se a porcentagem estivesse associada ao mencoder, não? Ou eu estou enganado? E para ficar legal teria de ter mais parâmetros, pois vídeos grandes demorariam muito para a barra de progresso aumentar.
Mesmo com isso tudo, acredito que já estamos chegando no objetivo.
-
Por isso tem o while, só que eu errei na verificação... o correto seria algo como
while [ -n "`pidof mencoder`" ] ; do
Onde "mencoder" é o nome exato do processo. O do firefox, por exemplo, é firefox-bin. Outra opção seria zerar o tamanho do arquivo no final e fazer a verificação enquanto ele tem tamanho... o importante é fazer o zenity parar de receber informação, caso contrário ele não ele não fecha mesmo, se quiser testar: while [ 1 ] ; do echo 100 | zenity --progress --title="Aguarde..."; done
(vai ter que matar)
-
Desculpe, sou meio noob.
Tentei a linha while [ -n "`pidof mencoder`" ] ; do echo 100 | zenity --progress --title="Aguarde..."; done
Aparece a janela "aguarde"... com a barra toda cheia e um botão OK. Ela não desaparece sozinha, só quando dá OK.
Daí fiz o casamento:
while [ -n "`pidof mencoder`" ] ; do
(
echo "00"; sleep 1
echo "33"; sleep 1
echo "66"; sleep 1
echo "100"
) |
zenity --progress --title="Aguarde..."; done
Assim a barra vai enchendo, mas bem rápido, como havia imaginado, e se eu der OK ela enche de novo.
Mas afinal, o que eu fiz estava certo?
-
- 0 é 0% de progresso, 33 é 33% de progresso, 66... por isso você deve pegar o pregresso apresentado no terminal.
- A condição é enquanto não é nulo (ou seja, enquanto o programa tem id -- está rodando)... se o processo ainda existe a janela vai ser recriada. Mas dá mudar pra, por exemplo, "while [ -e "/tmp/mencoder-log" ]" enquanto o mencoder-log existe (ai pra fechar você teria que colocar um rm apagando o logo depois do comando do mencoder). Olhe: http://aurelio.net/shell/canivete/#test
-
A parte da porcentagem eu até entendi. O que eu não entendi foi como associá-la ao log do mencoder.
Lá no script original tem uma parte que deleta o log:
#Remove o arquivo de log
rm -f /tmp/mencoder-log$$
Mas isso é feito depois que a conversão acaba, naturalmente.
Outra coisa que não entendi foi o fato de ter um botão OK ativo, enquanto o cancelar está inativo. E se eu quiser parar o processo?
Estava dando uma olhada no Yad, um zenity "melhorado", e vi que lá dá para controlar melhor a criação de botões:
http://www.webupd8.org/2010/12/yad-zenity-on-steroids-display.html
Será que vale a pena trocar o zenty pelo yad?
Edit: achei isso:
http://code.google.com/p/yad/wiki/TimeoutIndicator
Colei o código dentro do script mas não funcionou também. E aqui também não tinha nenhum arquivo .gtkrc-2.0.
-
-O botão "cancel" é desabilitado quando o progresso é 100% e o "ok" é habilitado. Sem uma opção de habilitar manualmente o botão (acho que não existe no zenity), vai ser necessário um recurso técnico do tipo: verifica se o mencoder informou progresso de 100, se ele ainda está rodando, mostre 99 caso contrário mostre 100.
-O zenity é meio engessado mesmo, mas não achei o yad vantagem nesse caso. O ideal seria escrever em algo que desse pleno controle, como python ou perl (poderia ser qualquer linguagem, desde que fosse possível usar o gtk sem amarras).
-
-O botão "cancel" é desabilitado quando o progresso é 100% e o "ok" é habilitado. Sem uma opção de habilitar manualmente o botão (acho que não existe no zenity), vai ser necessário um recurso técnico do tipo: verifica se o mencoder informou progresso de 100, se ele ainda está rodando, mostre 99 caso contrário mostre 100.
Mas é exatamente isso que o script faz usando o qdbus+kdialog. O tal loop.
Eu percebi que a barra do zenity aparece cheia porque o log foi criado, então eu cancelei a criação do log. Deixei o mencoder puro.
~/.convert/mencoder | while [ -n "`pidof mencoder`" ] ; do
(
echo "00"; sleep 1
echo "33"; sleep 1
echo "66"; sleep 1
echo "100"
) |
zenity --progress --title $"Mencoder" --text="por favor aguarde um instante." --auto-close --auto-kill; done
Com isso a barra passou a encher, mas daquele jeito: enche rápido e depois dá um loop, voltando a encher, sem parar, até depois da conversão.
(https://ubuntuforum-br.org/proxy.php?request=http%3A%2F%2Fimg51.imageshack.us%2Fimg51%2F4615%2Fcapturadetela4g.th.png&hash=8cac8e4419452b33ddf5db1de372cda908f7684f) (http://img51.imageshack.us/i/capturadetela4g.png/)
Se eu desabilito essas linhas que vem em baixo, e não sei para que servem, o script não funciona:
IFS=$ORI_IFS
(...)
IFS=$'\n'
fi
done
IFS=$ORI_IFS
Naquela página do shell, eu vi que tem uma opção de dar loop segundo um arquivo:
Loop nas linhas de um arquivo ou saída de comando
cat /etc/passwd | while read LINHA; do echo "$LINHA"; done
grep 'root' /etc/passwd | while read LINHA; do echo "$LINHA"; done
while read LINHA; do echo "$LINHA"; done < /etc/passwd
while read LINHA; do echo "$LINHA"; done < <(grep 'root' /etc/passwd)
De repente o caminho é por aí. Só não sei como se faz.
-
No exemplo eu usei um valor arbitrário qualquer, é claro que ele não vai refletir o real progresso. Olhe a terceira mensagem.
---
A minha terceira mensagem.
-
Tirei tudo e deixei assim:
~/.convert/mencoder | while [ -n "`pidof mencoder`" ] ; do
zenity --progress --title $"Mencoder" --text="por favor aguarde um instante." --auto-close --auto-kill
done
Quase funcionou. A barra não enche mas pelo menos fecha sozinha depois que a conversão acaba.
-
certo, venho lendo esse topico por que ha tempos ando procurando coisas sobre o d-bus, mas ate agora nao ache nada simples que desse pra entender. o que pude compreender desse script indica que o qdbus é usado para enviar progresso do mencoder para o dbus, de onde ele é lido pelo kdialog. Com certeza deve ser possivel fazer o mesmo com o zenity mas é complicado, tem que entender de d-bus.
acho que o primeiro passo é ver que tipo de saida o mencoder da quando esta convertendo, ele da alguma saida? se der vamos analiza-la e ver como poderiamos usar pra abastecer o zenity, talvez seja possivel fazer isso wsem necessidade de mexer no d-bus, tudo vai depender de que tipo de saida o mencoder da, se ele desse uma percentagem seria facilimo, se ele nao der nenhuma ae complica, so atraves de d-bus mesmo.
-
O mencoder dá porcentagem, sim. Veja o print do terminal no meu terceiro post.
-
certo, é que aqui nao apareceu a imgem no forum, so quando cliquei em cima. sendo assim fica facil, basta pegar a saida padrao do mencoder, fazer um pipe rederecionando ela para um sed feito pra pegar so a percentagem, depois disso voce faz outro pipe jogando o resultado desse sed para o progress do zenity.
so testando pra ver, talvez possa ser feito assim direto "comando-do-mencoder | sed pra pegar a percentagem | zenity --progres ...etc", caso nao de certo assim direto é possivel tambem redirecionar a saida do mencoder para um arquivo dando um "tail -f" nesse arquivo e redirecionar o resultado do tail com um pipe para o progress do zenity.
eu ja fiz isso antes de ambas as formas, tou sem tempo de trabalhar nesse script diretamente agora mas creio que isso resolvera.
-
O problema é que eu n tenho a mínima ideia de como se faz isso :-\
Eu pensei em algo do tipo cut "parâmetro" para sumir com tudo q não é a porcentagem e jogar isso para o --percentage do zenity.
-
Encontrei uma informação que pode ajudar:
A opção --pulsate é útil aqui porque só estou dizendo "agüente aí que estou trabalhando". Não tenho nenhuma porcentagem real a oferecer, então essa opção faz a barra de progresso se mover de uma lado para o outro, que nem a luz no capô da Super Máquina. Se precisar exibir informações quanto ao nível de progresso, "ecoe" as porcentagens para o zenity:
( for FILE in find $START_DIR --name $FILE_NAME;
do
echo 1;
echo $FILE >> $OUTPUT_FILE;
done
echo 100;
echo "#Todos os arquivos estão listados em $OUTPUT_FILE"
) | zenity --progress --percentage=0 --text "Procurando arquivos..." --title "Encontrar e listar arquivos";
http://www.hardware.com.br/artigos/zenity2/
Edit: agora está quente!
Este comando joga a saída do mencoder para um log (comando do script original):
~/.convert/mencoder > /tmp/mencoder-log$$ 2> /dev/null &
Este lê a linha onde tem a porcentagem e joga em outro log:
cat /tmp/mencoder-log$$ | sed '$!d' /tmp/mencoder-log$$ | grep Pos > /tmp/mencoder-percent$$ 2> /dev/null
E este lê o log da porcentagem e mostra apenas o valor numérico:
cat /tmp/mencoder-percent$$ | sed '$!d;s/.*(//; s/%.*//'
Agora só faltam duas coisas: passar essa saída para a porcentagem do zenity e garantir que esses logs sejam atualizados (loop).
-
Na comunidade do Ubuntu no Orkut me deram a dica do seletor de arquivos:
$ zenity --file-selection --multiple | tr '|' '\n'
ou
$ zenity --file-selection --multiple --separator='
> '
Já a da barra de progresso... empaquei
-
Progresso, progresso...
Quase não dormi ontem. Fiquei direto tentando resolver essa questão da barra. Consegui deixar ela finalmente 90%.
Vou postar tudo do jeito que está. Assim vocês podem me apontar o que está faltando para ficar 100%:
#Executa o mencoder
IFS=$'\n'
/usr/share/lineduccontrolpanel/categories/others/convert/mencoder "$i" 2> /dev/null
chmod +x ~/.convert/mencoder
~/.convert/mencoder > /tmp/mencoder-log$$ 2> /dev/null &
IFS=$ORI_IFS
#Aguarda 4 segundos para assegurar que o log ja foi criado
sleep 4
# Cria o log da porcentagem
while [ -n "`pidof mencoder`" ] ; do
cat /tmp/mencoder-log$$ | grep Pos | sed '$!d;s/.*(//; s/%.*//' > /tmp/mencoder-percent$$ # 2> /dev/null
done &
# Lê a porcentagem e joga para a barra
while [ -e "/tmp/mencoder-log$$" ] ; do
(
echo "00"; sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo "100"
) |
zenity --progress --title "Mencoder" --auto-close --text "Convertendo, aguarde por favor. \n $i \n $(sed '$!d;s/(.*)//;s/A.*//;s/V//' /tmp/mencoder-log$$)"; done
#Remove o arquivo de log
rm -f /tmp/mencoder-log$$
rm -f /tmp/mencoder-percent$$
IFS=$'\n'
fi
done
IFS=$ORI_IFS
Do jeito que está, a barra vai enchendo até um certo ponto, depois o zenity fecha sozinho e abre aonde parou. Acho que se eu colocar 100 linhas "echo $(cat /tmp/mencoder-percent$$)", ele vai até o fim, mas penso que deve haver algo mais simples.
Dois problemas: o botão de cancelar não cancelou o processo e o zenity não fechou depois que a conversão terminou, pois o log não foi deletado. Tentei colocar um "&" depois do done, na linha do zenity, mas com isso o log foi deletado logo de cara.
Print:
(https://ubuntuforum-br.org/proxy.php?request=http%3A%2F%2Fimg4.imageshack.us%2Fimg4%2F3821%2Fprogresso.th.png&hash=a4674b393901e5a123c58a7dcad737d0878ad901) (http://img4.imageshack.us/i/progresso.png/)
PS: o vídeo "cobaia" foi o do galactus, rsrsrs.
-
Na comunidade do Orkut, um camarada me passou uma que funciona. Só que o botão de cancelar não está funcionando. Acredito que um "if alguma coisa" antes dos parâmetros da conversão (no original tinha um) e um elif ou else, não sei, para o cancelamento, o fariam funcionar.
O código como está:
ORI_IFS=$IFS
IFS=$'\n'
for i in $(cat ~/.convert/videos); do
IFS=$ORI_IFS
# if [ "$cancelado" != "yes" ]; then <---- esse era o original
#Executa o mencoder
IFS=$'\n'
/usr/share/lineduccontrolpanel/categories/others/convert/mencoder "$i" 2> /dev/null
chmod +x ~/.convert/mencoder
~/.convert/mencoder 2> /dev/null |
tr '\r' '\n' 2> /dev/null |
grep "^Pos:" 2> /dev/null|
sed -e 's/( *//;s/)//' 2> /dev/null|
awk '{ print $4 "\n#Aguarde (" $4 " " NR ")" }' 2> /dev/null |
zenity --progress --title=Conversão --auto-kill
IFS=$'\n'
# fi
done
IFS=$ORI_IFS
-
Ainda não consegui mas agora tenho certeza que estou quase lá.
Fiz uma coisa aqui que quase funcionou. "Quebrei" a primeira versão que me passaram na Ubuntu Brasil com um if:
ORI_IFS=$IFS
IFS=$'\n'
for i in $(cat ~/.convert/videos); do
IFS=$ORI_IFS
#Executa o mencoder
IFS=$'\n'
/usr/share/lineduccontrolpanel/categories/others/convert/mencoder "$i" 2> /dev/null
chmod +x ~/.convert/mencoder
~/.convert/mencoder 2> /dev/null |
if [ -n "`mencoder`" ] ; then
tr '\r' '\n' 2> /dev/null |
grep "^Pos:" 2> /dev/null|
sed -e 's/( *//;s/)//' 2> /dev/null|
awk '{ print $4 "\n#Aguarde (" $4 " " NR ")" }' 2> /dev/null |
zenity --progress --title=Conversão --auto-kill
IFS=$'\n'
fi
done
IFS=$ORI_IFS
if [ $? = 0 ] ; then
zenity --title="Ops !" --info --text "Operação cancelada pelo operador !"
exit 2;
fi
Agora falta só acertar o tipo de "if", pois do jeito que está, o aviso de cancelamento aparece também quando o vídeo é concluído.
-
Finalmente funcionou, graças a dica do usuário Passageiro, da comunidade do Ubuntu. Ele me indiciou a colocar o "if" na linha do zenity.
O código ficou assim:
##############
## CONVERTENDO
##############
ORI_IFS=$IFS
IFS=$'\n'
for i in $(cat ~/.convert/videos); do
IFS=$ORI_IFS
#Executa o mencoder
IFS=$'\n'
/usr/share/lineduccontrolpanel/categories/others/convert/mencoder "$i" 2> /dev/null
chmod +x ~/.convert/mencoder
~/.convert/mencoder > /tmp/mencoder-log$$ 2> /dev/null &
IFS=$ORI_IFS
#Aguarda 4 segundos para assegurar que o log ja foi criado
sleep 4
# Cria o log da porcentagem
while [ -n "`pidof mencoder`" ] ; do
cat /tmp/mencoder-log$$ | grep Pos | sed '$!d;s/.*(//; s/%.*//' > /tmp/mencoder-percent$$ # 2> /dev/null
done &
# Lê a porcentagem e joga para a barra de progresso
while [ -n "`pidof mencoder`" ] ; do
(
echo "00"; sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo $(cat /tmp/mencoder-percent$$); sleep 3
echo "100"
) |
if zenity --progress --title "Mencoder" --auto-close --text "Convertendo, aguarde por favor. \n $i \n $(sed '$!d;s/(.*)//;s/A.*//;s/V//' /tmp/mencoder-log$$)"; then
zenity --title="Fim" --info --text "Fim normal de operação"
else
zenity --title="Ops !" --error --text "Operação cancelada pelo operador !"
killall mencoder
fi
done
#Remove o arquivo de log
rm -f /tmp/mencoder-log$$
rm -f /tmp/mencoder-percent$$
IFS=$'\n'
done
IFS=$ORI_IFS
Resultado:
(https://ubuntuforum-br.org/proxy.php?request=http%3A%2F%2Fimg862.imageshack.us%2Fimg862%2F3491%2Fcapturadetela1g.th.png&hash=0fa0be870a96d2c3f5f2b3f3042dfd8e8a0869b5) (http://img862.imageshack.us/i/capturadetela1g.png/)
A parte do echo que enche a barra ainda precisa melhorar, pois se o vídeo for grande, a mensagem "Fim normal de operação" aparece várias vezes antes da conversão realmente terminar.
Outro pequeno problema é que está demorando muito para a tela de conversão concluída aparecer:
(https://ubuntuforum-br.org/proxy.php?request=http%3A%2F%2Fimg807.imageshack.us%2Fimg807%2F3650%2Fcapturadetela2.th.png&hash=ad50d45f73707a05510c24c45fb2d84a9523fda0) (http://img807.imageshack.us/i/capturadetela2.png/)