[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------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: RES: [shell-script] Shell Script,
Juari Ritter Müller <=