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

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

Re: [shell-script] SCP com dialog - Muito lento!


From: Julio C. Neves
Subject: Re: [shell-script] SCP com dialog - Muito lento!
Date: Wed, 23 Apr 2014 11:26:32 -0300

Texto retirado do livro "Bombando o Shell"

Diálogo --gauge

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:

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 escrevee 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:


Abcs,
Julio
@juliobash
Próximos cursos de Shell
Cidade         Local Período
Rio de Janeiro EDX 26-30/05
Dou treinamento de shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.



Em 23 de abril de 2014 10:33, <address@hidden> escreveu:
 

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!




reply via email to

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