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

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

Re: [shell-script] redirecionamento ou TMOUT


From: moysespr
Subject: Re: [shell-script] redirecionamento ou TMOUT
Date: Wed, 31 Aug 2005 21:15:33 -0700 (PDT)

Óbvio que és o Felipe. Se não falas nem teria percebido minha falha. Sorry:(


--- Felipe Kellermann <address@hidden> wrote:

> > Acho até hoje absurdo ter de usar prog.ext. apenas para isso. Sei que 
> 
> Na zsh, essa implementacao toma partido de um "comando" implicito. Esta' 
> faltando um elemento nessa linha (gramaticalmente). Basta fazer com que 
> seja executado o conteudo sobre algum comando.

"...seja executado o conteudo sobre algum comando"
Na bash?
Se sim, mas esse é o problema! Não lembro de um comando do shell que caiba
aqui, só o que chamo de programas (elementos externos ao shell), como o cat.
O read nao serve.

> Mas neste caso a TMOUT refere-se aa interacao com o usuario, com a entrada 
> de comandos. Enquanto os comandos nao sao finalizados, a TMOUT nao estara 
> sendo verificada. Faz um teste assim: Coloca um TMOUT qualquer e depois 
> faz um loop ocupado,
> 
> $ TMOUT=5
> $ while :; do :; done
> $
> 
> Nao vai sair. A semantica seria mais util se fosse possivel fazer com que 
> o TMOUT enviasse um alarme ao processo da shell. Na zsh funciona assim e 
> eu nao lembro se a bash tem algum mecanismo parecido (se eu tenho um trap 
> para ALRM, considera o TMOUT como um timer como um setitimer(2)).

Não vai sair porque o shell está trabalhando. Veja isto:
$ cat tm
#!/bin/bash
TMOUT=3
date
echo interno, read
while read;do date;done< <(cat)
date
echo externo, sleep
sleep 30

$ ./tm
Thu Sep  1 00:41:26 hrN 2005
interno, read
Thu Sep  1 00:41:29 hrN 2005
externo, sleep

No read eu sei que funciona, independente do shell ser interativo.
E se um  "$ <a>b" fosse viável, funcionaria? Isto eu não sei.

Vou pesquisar essa tua idéia do trap.

> 
> Se tiver alguma dica, envia. Provavelmente o modo mais "sujo" de trarar 
> isso seria colocar algum processo em background, que enviaria um sinal e 
> etc., mas isso ja seria chato e feio, seria melhor usar uma linguagem.
Esse processo novo é que não quero.
Olha o que observei há pouco:

web:/tmp$ cat a
abc
def
ghi
web:/tmp$ echo "$(<a)"
abc
def
ghi
web:/tmp$ exec 3<a
web:/tmp$ echo "$(<&3)"

web:/tmp$ exec 3<a
web:/tmp$ cat <&3  
abc
def
ghi
web:/tmp$

Essa diferença entre $(<a) e $(<&3) eu não entendi.


> De qualquer forma, com meu bash seria um simples:
> $ (shopt -s nonblock; exec 3</etc/passwd; cat <&3)
Como não sei realmente o que acontece por baixo dos panos quando o cat fica
parado lendo o fd, pergunto:
$ (shopt -s nonblock; cat )
Ficaria preso?
Eu nunca tive problema usando arquivos locais, que me lembre, apenas em links
TCP ocorre o problema. Inclusive o experimento acima pareceu indicar-me que
coisas estranhas realmente acontecem. Ou há algo óbvio que não vi?

Grato pelo interesse.



                
____________________________________________________
Start your day with Yahoo! - make it your home page 
http://www.yahoo.com/r/hs 
 


reply via email to

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