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

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

Re: RES: [shell-script] Shell Script


From: Juari Ritter Müller
Subject: Re: RES: [shell-script] Shell Script
Date: Mon, 4 Mar 2002 00:09:25 -0300
User-agent: Mutt/1.3.27i

Realmente interessante esta ideia de usar pipes. Utilizando esta técnica
(um pouco modificada e otimizada, é claro) eu consegui fazer um script
de download de arquivos que eu posso executar e ir dormir tranquilo.
(a minha conexao à internet algumas vezes cai, e tenho de reconectar...)
Entre as principais vantagens deste script, destacam-se:

* o script em si somente trata de verificar se a conexao à internet
  está ativa, e reconecta se necessário, além de controlar o processo
  do programa de download, o wget
* o programa que faz o download propriamente dito (wget), tem a sua saída
  direcionada para o named pipe e daí eu dou um cat neste pipe num outro
  terminal.

Resultado: tenho um terminal que mostra as checagens de conexao ativa
e o outro que mostra o progresso do download. O script está no fim deste
email.

PS: se tiver um bug muito obvio me avisa. eu escrevi ele e já estou rodando de
primeira agora!
 
On Thu, Feb 28, 2002 at 11:29:02AM -0300, Julio Cezar Neves - DISB.O wrote:
> Oi Teresa,
> 
> sem dúvida alguma, o melhor a fazer é utilizar named-pipes ou FIFO. Acabei
> de escrever uma seção sobre o assunto que será incorporada à terceira edição
> do meu livro, que traz como exemplo um caso bastante parecido com o que vc
> precisa. Trata-se da simulação de lock em bancos. Quem quiser me peça que a
> envio em um anexo (.doc). É um texto com várias páginas.
> 
> Não tentei entender a sua lógica por absoluta falta de tempo, porém para
> rapidamente poder te ajudar vou colocar um resumo do que deve ser feito:
> 
> prompt> mkfifo pipe1
> prompt> ls -l pipe1
> prw-r--r--   1 jneves   ssup              0 Jan 24 16:54 pipe1
> # Note que o arquivo pipe1 é do tipo "p"
> 
> No final do prg R.SH coloque o seguinte comando:
> echo "Dispara R1.SH" > pipe1
> 
> Inicie o programa R1.SH da seguinte maneira:
> 
> Disparo=
> while [ "$Disparo" != "Dispara R1.SH" ]
> do
>     Disparo=`cat pipe1`
> done
> 
> Pode ficar despreocupada que vc não está criando um loop furioso que exaure
> todos os recursos da máquina. O named-pipe precisa de um processo "falador"
> e de um "ouvidor". Enquanto os 2 não estiverem presentes o que estiver na
> ponta do pipe estará em modo de espera.
> 
<++> download.sh
#!/bin/bash
#
tty=$(tty)
tty=${tty#/dev/}
HOST=http://sf1.mirror.openoffice.org/641c/install641C_linux_intel.tar.gz

debug(){
        echo $@
}

ppp_ok(){
        debug -n checando ppp...
        if ifconfig|grep -q ppp0; then
                debug ppp ok
                return 0
        else
                debug ppp desligado!
                return 1
        fi
}
wait4ppp(){
        while :; do 
                debug -n esperando ppp ligar...
                if ifconfig|grep -q ppp0; then
                        debug ppp ligado!
                        break;
                fi
                sleep 1
                debug
        done
}

get(){
        debug vamos iniciar o wget
        wget -c $HOST 1>localpipe 2>&1 3>&1 &
}
get
while :; do
        if ppp_ok; then
                sleep 5
                continue
        fi
        debug vamos matar o wget!
        P=
        P=$(ps augx|grep wget|grep -v grep|grep $tty|awk '{print $5}')
        if [ "$P" ]; then
                debug ok _tem_ wget pra matar - $P
                kill -9 $P
        else
                debug desculpe, mas nao tem nenhum wget rodando pelas 
redondezas...
        fi
        debug vamos ligar o ppp!
        pon
        debug agora eh esperar para ver...
        wait4ppp
        debug ok, nao precisa mais esperar
        get
done
<-->

-- 
Juari Ritter Müller                        mailto:address@hidden|
/J\_/U\_/A\_/R\_/I\                           mailto:address@hidden|
\L/ \I/ \N/ \U/ \X/                       mailto:address@hidden|

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GE d-- s: a18 C+++ UL++ P+ L++> E- W+ N+ o? K? w--
O? M? V- PS+ PE Y+ PGP t+ 5+ X+ R tv- b+ DI D++
G e h! !r y?
------END GEEK CODE BLOCK------


reply via email to

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