[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Valor perdido ao sair de loop
From: |
Julio C. Neves |
Subject: |
Re: [shell-script] Valor perdido ao sair de loop |
Date: |
Thu, 14 Sep 2006 18:33:03 -0300 |
Fala Geilson
antes de mais nada queria agrader à indicação do meu livro. Em segundo
lugar, esplicar que na resposta do Tiago: < <(cmd), somente o primeiro < é
um redirecionamento. O <(cmd) é um named pipe temporário. Vc pode confirmar
isso da seguinte forma:
Prompt> ls -l >(cat)
l-wx------ 1 d276707 ssup 64 Sep 14 17:38 /dev/fd/63 ->
pipe:[175085]
Veja maiores detalhes em www.julioneves.com e lá procure Substituição de
Processos.
--
Abraços,
Julio
http://www.julioneves.com - Um livro sobre Bash completo e on-line
:wq
Em 14/09/06, Geison Farias <address@hidden> escreveu:
>
>
> Puxa, valeu Tiago.
>
> Havia tentado outras formas de redirecionamento mas não esta: "< <( xxx
> )".
> Desconfiava do sub-shell...
>
> Brigadão.
> Geison
>
>
>
> Tiago Barcellos Peczenyj escreveu:
> > quando vc faz
> >
> > echo "alguma coisa" | while read A ; do ... ; done
> >
> > a parte que lida com a variavel A é executada em um sub-Shell. Ao
> > alterar uma variavel em um subshell vc não tem como fazer o valor
> > voltar, pois não existe uma referência entre os shells.
> >
> > Faça assim:
> >
> > #!/bin/bash
> > A="..."
> >
> > JUNTA=
> > CAMPOS=
> >
> > while read LINHA ; do
> > C1=${LINHA:2:3}
> > C2=${LINHA:6:3}
> > C3=${LINHA:8:3}
> > C4=${LINHA:14:3}
> >
> > CAMPOS="${C1}${C2}${C3}${C4}---"
> >
> > JUNTA=${JUNTA}${CAMPOS}
> >
> > done < <(echo "$A"| grep "^9........j")
> >
> > echo "${JUNTA}"
> >
> > pois o redirecionamento '<' é mais 'confiavel' para o que vc quer ;-)
> >
>
--
Abraços,
Julio
http://www.julioneves.com - Um livro sobre Bash completo e on-line
:wq
[As partes desta mensagem que não continham texto foram removidas]