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: Felipe Kellermann
Subject: Re: [shell-script] redirecionamento ou TMOUT
Date: Fri, 2 Sep 2005 01:19:34 -0300 (BRT)
User-agent: Pine <http://www.washington.edu/pine/>

On Wed, 31 Aug 2005 9:15pm  -0700, moysespr wrote:

> 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.

Muito interessante. Eu ignorei o caso do read.
Mas sobre a pergunta, suponho que sim. Eu nao teria como usar a zsh como 
parametro de comparacao porque a semantica do TMOUT muda bastante entre 
bash e zsh e outras shells.


> 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.

Sao inconsistencias das bash, digamos. A primeira sempre existiu (em todas 
as que sao ksh-derivadas). A segunda seria interessante, mas infelizmente 
nao foi implementada. Ou seja, esse $(<&fd) esta sendo interpretado apenas 
como um comando <&fd em $(), que no caso da shell bash, vai ser ignorado.

Na verdade ele retorna um valor verdadeiro-ou-falso. Se o descritor existe 
e esta aberto, bash retorna true. Falso no caso contrario. Tem bem pouca 
utilidade, nao?

Ou seja: Tem o mesmo significado que: echo "$(true)".

Na zsh:
% hostname > host
% exec 3<host
% print "$(<&3)"
orchid.nyvra.org
%


> 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?

Nao.
Passaria e retornaria verdadeiro.


> 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?

Nao seriam arquivos "locais". Seriam arquivos puros, comuns. Tenta fazer 
teus testes com fifos. Mesmo assim, certamente com fifos tu vai ter menos 
resultados "estranhos" do que com sockets.

Com um socket UNIX ou com um fifo tu tem bem menos possibilidades de uma 
conexao "parar" por algum motivo do que com uma comunicacao TCP. Por isso 
tu tem esses resultados estranhos. Entre milhares de conexoes que tu tem 
feito, seria muiito normal que algumas "tranquem", e por isso existe a 
necessidade de operacoes nao bloqueantes...

-- 
Felipe Kellermann


reply via email to

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