|
From: | Julio C. Neves |
Subject: | Re: [shell-script] SCP com dialog - Muito lento! |
Date: | Wed, 23 Apr 2014 11:26:32 -0300 |
Onde:
<Percent> - É um opcional que indica a percentagem inicial (o padrão é zero)
Uma caixa --gauge mostra uma barra de progresso que vai aumentando a medida que valores são passados para sua entrada primária.
Além destes valores, também podemos passar texto para este diálogo. A forma de fazê-lo é a seguinte:
Abra o processo de comunicação com o --gauge mandando o texto XXX para sua entrada primária;
Agora se você mandar números para a entrada primária, eles serão considerados atualizações do percentual de tarefa cumprida;
Se você mandar texto ele será colocado na parte superior da caixa, abaixo da linha do --title;
Para encerrar o processo de comunicação, envie novamente o texto XXX.
Se o XXX não for usado, o texto recebido por sua entrada primária será ignorado, mas os valores serão entendidos e atualizarão a percentagem cumprida.
A seguir um exemplo simples do uso deste diálogo:
Perc=
while ((Perc <= 100))
do
echo $Perc
((Perc++))
sleep 0.05
done |
dialog --clear --title "Teste do --gauge no dialog" \
--gauge 'Se segura ...' 7 30 0
Se você executar este fragmento de programa, verá que apesar dele não ter a tal sequência XXX, a percentagem é atualizada. Porém se houvesse texto, ele seria ignorado.
Agora um exemplo mais completo:
$ cat gauge1.dlg
#!/bin/bash
## Script para testar o diálogo --gauge
Perc=
Pont='|/—\' # Para fazer um hélice do lado direito
m=m # Somente para alterar o verbo falta/faltam
while ((Perc <= 100))
do
echo XXX # Marca início de msgs para o gauge
echo $Perc
echo Incremento a cada 20 centésimos de segundo
echo -n " Falta$m \Zb\Z1$[100-Perc]%\ZB\Zn "
echo para completar a tarefa ${Pont:((Perc%4)):1}
echo XXX # Marca fim de msgs para o gauge
let Perc++
## quando estiver acabando 'faltam' perde o 'm'
#+ e a hélice é desligada
((Perc>98)) && { m=; unset Pont; }
sleep 0.20
done | dialog --clear --colors --title \
"Teste Gauge no dialog" --gauge "" 7 46 0
Neste exemplo, ainda montei um hélice só de gozação. A variável $Pont recebe os quatro componentes do hélice na ordem que serão exibidos e a expressão ${Pont:((Perc%4)):1} extrai um caractere de $Pont, cuja ordem é o resto da divisão de $Perc por 4, isto é, para resto=0 extrai e escreve |, para resto=1 extrai e escreve /, para resto=2 extrai e escreve — e para resto=3 extrai e escreve \.
Veja ainda que o conteúdo das linhas que estão entre o par de XXX está sendo exibido. O conteúdo de $Perc, por ser numérico, atualiza a barra de progresso, ao passo que as outras saídas atualizam a exibição das orientações passadas ao usuário.
Pode parece maluquice ou sujeira, mas no duro, as cadeias iniciadas por \Z, servem como parâmetros de formatação de cor e estilo dos caracteres, desde que a opção genérica --colors seja usada, quando as cores obedecem a seguinte tabela:
Código Z |
Valor |
0 |
black |
1 |
red |
2 |
green |
3 |
yellow |
4 |
blue |
5 |
magenta |
6 |
cyan |
7 |
white |
Para voltar à cor padrão, usa-se \Zn.
A formatação de estilo pode ser feita de acordo com a seguinte tabela:
Atributo |
Liga |
Desliga |
Ênfase |
b |
B |
Reverso |
r |
R |
Sublinhado |
U |
U |
Os atributos são cumulativos, assim sendo, a cadeia \Zb\Z1 coloca o texto em modo ênfase (bold) e em vermelho e a cadeia \ZB\Zn desfaz ambos.
Como --colors é uma opção genérica, pode ser usada nos textos de todos os diálogos.
Para evitar-se aquele monte de echo que foi usado no exemplo anterior, poderíamos tê-los substituído todos com o uso de Here Documents, da seguinte forma:
$ cat gauge2.dlg
#!/bin/bash
## Script para testar o diálogo --gauge
Perc=
Pont='|/—\' # Ponteiros de um hélice do lado direito
m=m # Somente para alterar o verbo falta/faltam
while ((Perc <= 100))
do
cat <<- FIM # Início do Here Document
XXX # Marca início de msgs para o gauge
$Perc
Incremento a cada 20 centésimos de segundo
Falta$m \Zb\Z1$[100-Perc]%\ZB\Zn para\
completar a tarefa ${Pont:((Perc%4)):1}
XXX # Marca fim de msgs para o gauge
FIM # Fim do Here Document
let Perc++
## Quando estiver acabando, 'faltam' perde
#+ o 'm' e o hélice é desligado
((Perc>98)) && { m=; unset Pont; }
sleep 0.20
done | dialog --clear --colors --title \
"Teste Gauge no dialog" --gauge "" 7 46 0
Neste código cabem algumas observações:
O hífen após os dois sinais de menor (<<-) foi usado para permitir a indentação do código, mas para fazer isso, só podemos unicamente usar <TAB>. Os espaços em branco serão considerados texto, como pode ser visto na linha começada por Falta$m;
A indentação mesmo assim não fica boa e por isso o código perde um pouco a legibilidade.
Olá amigos, como vão?
Desenvolvi um script para enviar uma sequencia de arquivos via SCP e informar o progresso via barra de progressos do Dialog. Tudo está funcionando bem, o único inconveniete é que o envio do Dialog demora muito mais do que um simples SCP digitado no terminal.
Vocês saberiam me dizer se há algo que eu possa fazer para tornar o envio mais rápido, usando o Dialog?
Abraço!
[Prev in Thread] Current Thread [Next in Thread]
- SCP com dialog - Muito lento!, eduardo.a.s.amaral, 2014/04/23
- Re: [shell-script] SCP com dialog - Muito lento!, Julio C. Neves <=
- Re: [shell-script] SCP com dialog - Muito lento!, eduardo.a.s.amaral, 2014/04/23
- Re: [shell-script] SCP com dialog - Muito lento!, Julio C. Neves, 2014/04/23
- Prev by Date: Re: [shell-script] Executar comando diminuindo timeout
- Next by Date: Re: [shell-script] SCP com dialog - Muito lento!
- Previous by thread: SCP com dialog - Muito lento!
- Next by thread: Re: [shell-script] SCP com dialog - Muito lento!
- Index(es):