shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Criar barra de progresssão


From: Julio C. Neves
Subject: Re: [shell-script] Criar barra de progresssão
Date: Tue, 1 Dec 2009 11:59:17 -0200

Itamar,
não vou fazer, mas vou te dar o caminho das pedras. Já fiz isso uma vez em
zenity, procurei, mas não achei. Primeiro algumas dicas:

copie e cole este código em um arquivo e execute-o para vc entender o
funcionamento da opção --progress do zenity (muito semelhante ao dialog)

#!/bin/bash

for ((int=1; int<=100; int++))

do

 echo $int

 echo "# Decorridos $int% da tarefa"

 sleep 0.03

done | zenity --progress \

 --auto-close \

 --title="Exemplo de Progress"

Repare agora que qdo vc faz o echo de um número, ele considera a atualização
de uma porcentagem e atualiza a barra. Qdo vc ecoa um literal precedido por
um #, ele considera que deve atualizar o texto da caixa, ou seja,  neste
exemplo, a linha echo $int continua atualizando a percentagem, porém a
linhaecho "# Decorridos $int% da tarefa" fica
alterando a saída que fica no espaço destinado à propriedade --text.

Pronto, agora vc já sabe tudo de progress no zenity. Vamos ver os
procedimentos para vc fazer o que deseja e, se quizer, adaptar ao dialog
(mas não se esqueça que a opção --display do zenity te permite executar em
uma sessão que não seja xterm e até em uma máquina remota).

primeiro vc tem de ver o tamanho do diretório de destino do pacote (se forem
vários diretórios, vc terá de somar todos) e guardar na variável $inicio.

Em seguida dispare o zenity --progress associando-o a um número de
dispositivo lógico (vamos usar o 8 como exemplo).

exec 8> >(zenity 2>/dev/null --progress --autoclose --auto-kill --title
'Fazendo apt-get')&

Repare que o & vai colocar o processo em background. A opção --autoclose
serve para o diálogo fechar qdo chegar a 100% e --auto-kill serve para
cancelar o apt-get, caso vc cancele o diálogo (cancelando o script que
disparou o apt-get e o zenity).

Veja o tamanho total do pacote, some com a variável $inicio e coloque em
$final

Agora dispare o apt-get em foreground e monitore a sua saída. A cada arquivo
novo, verifique a área ocupara em cada diretório e calcule a percentagem já
executatada, colocando em $percent e o nome do arquivo que está sendo
baixado, colocando em $arq.

Agora faça:

echo $percent >&8
echo "# Baixando $arq" >&8

Ao fim faça:
exec 8>&-

Para fechar o dispositivo lógico 8.

PS: nos dias 09-10/12 (sábado e domingo) darei curso de zenity em Brasília.
Este mês tb darei cursos de shell no RJ e em SP. Estou engordando o meu
Natal... :) Veja detalhes abaixo da minha assinatura.

Abraços,
Julio
Cursos de Shell e Zenity em fins de semana?
- Em SP ligue (11) 2125-4747 Curso de 07 a 11/12;
- Em DF ligue (61) 3223-3000 Curso de zenity 09-10/01;
- No RJ ligue (21) 2561-0867 Curso nos dias 5,6,12,13/12;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.


2009/11/25 Itamar da Silva Oliveira <address@hidden>

>
>
> Valeu Rodrigo,
> Obrigado mesmo
>
>
> ________________________________
> De: Rodrigo Lang <address@hidden<rodrigoferreiralang%40gmail.com>
> >
> Para: address@hidden <shell-script%40yahoogrupos.com.br>
> Enviadas: Terça-feira, 24 de Novembro de 2009 18:53:35
>
> Assunto: Re: [shell-script] Criar barra de progresssão
>
> Itamar, eu também estava testando fazer com apt-get tentando pegar algum
> valor para fazer a porcentagem. Mas infelizmente a única alternativa que
> achei foi fazer adicionando uma porcentagem por cada pacote instalado até
> chegar em 100%... Bem provável que haja alguma alternativa, porém eu tive
> que pausar o meu projeto por causa de outras prioridades... Mesmo assim eu
> vou estar pesquisando, se achar algo volto a postar neste mesmo tópico.
>
> Ats,
> Rodrigo Lang.
>
> 2009/11/24 Itamar da Silva Oliveira 
> <address@hidden<itamaro_liveira%40yahoo.com.br>
> >
>
> >
> >
> > Pessoal,
> >
> > Me ajudem com esse script.
> > por favor
> > gostaria de melhorá-lo
> > usando guage (Barra de progresso) no apt-get e tambem se possivel me
> ajudem
> > no teste de compilação se der um error o script será abortado exibindo o
> > erro para o usuário
> >
> >
> >
> > ________________________________
> > De: Rodrigo Lang <address@hidden<rodrigoferreiralang%40gmail.com>
> <rodrigoferreiralang%40gmail.com>
> > >
> > Para: address@hidden<shell-script%40yahoogrupos.com.br><shell-script%
> 40yahoogrupos.com.br>
> > Enviadas: Sexta-feira, 6 de Novembro de 2009 17:16:38
> > Assunto: Re: [shell-script] Criar barra de progresssão
> >
> >
> >
> > Boa, obrigado pessoal, testarei e postarei o resultado!
> >
> > Obrigado,
> > Rodrigo Lang.
> >
> > 2009/11/6 Thomaz de Oliveira dos Reis <thor27@gmail. com>
> >
> > > Não testei, mas tente algo assim:
> > >
> > >
> > > PACOTES="bison openssl outro ..."
> > >
> > > for PACOTE in PACOTES
> > > do
> > > $APT $PACOTE
> > > echo 2
> > > done | dialog ....
> > >
> > >
> > >
> > >
> > > 2009/11/6 Rodrigo Lang <rodrigoferreiralang @gmail.com>
> > >
> > > >
> > > >
> > > > Boa tarde lista, estou desenvolvendo um shell script para a
> compilação
> > de
> > > > um
> > > > sistema aqui da empresa. Estou no momento tentando usar dialog para
> > fazer
> > > > uma barra de progressão, porém estou tendo algumas dificuldades. O
> que
> > eu
> > > > preciso inicialmente é fazer umas barra conforme cada pacote do
> apt-get
> > é
> > > > instalado. Alguém tem alguma dica de como diminuir o tamanho do
> script?
> > > > Porque são 50 pacotes, se cada pacote instalado eu colocar duas
> linhas
> > > vai
> > > > ficar enorme o script.
> > > >
> > > > APT="apt-get -qqqq install --force-yes"
> > > >
> > > > (
> > > > $APT bison
> > > > echo 2
> > > > $APT openssl
> > > > echo 2
> > > > $APT libssl-dev
> > > > echo 2
> > > > $APT libasound2-dev
> > > > echo 2
> > > > $APT libc6-dev
> > > > echo 2
> > > > echo 100
> > > > ) | dialog --title "Instalando" --gauge "Atualizando repositórios" 8
> 40
> > 0
> > > >
> > > > --
> > > > Rodrigo F. Lang
> > > > Amd. de Redes em Telecom
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > > >
> > > >
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> > > ------------ --------- --------- ------
> > >
> > > ------------ --------- --------- --------- --------- --------- -
> > > Esta lista não admite a abordagem de outras liguagens de programação,
> > como
> > > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> > prévio
> > > aviso.
> > > ------------ --------- --------- --------- --------- --------- -
> > > Sair da lista: shell-script- unsubscribe@ yahoogrupos. com.br
> > > ------------ --------- --------- --------- --------- --------- -
> > > Esta lista é moderada de acordo com o previsto em
> > > http://www.listas- discussao. cjb.net
> > > ------------ --------- --------- --------- --------- --------- -
> > > Servidor Newsgroup da lista: news.gmane.org
> > > Grupo: gmane.org.user- groups.programmi ng.shell. brazil
> > >
> > > Links do Yahoo! Grupos
> > >
> > >
> > >
> >
> > --
> > Rodrigo F. Lang
> > Amd. de Redes em Telecom
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > __________________________________________________________
> > Veja quais são os assuntos do momento no Yahoo! +Buscados
> > http://br.maisbuscados.yahoo.com
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
> --
> Rodrigo F. Lang
> Amd. de Redes em Telecom
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> ------------------------------------
>
> ----------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
> ----------------------------------------------------------
> Sair da lista: address@hidden<shell-script-unsubscribe%40yahoogrupos.com.br>
> ----------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ----------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
> __________________________________________________________
> Veja quais são os assuntos do momento no Yahoo! +Buscados
> http://br.maisbuscados.yahoo.com
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]