[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: Duvida sobre impressao de variavel
From: |
Julio C. Neves |
Subject: |
Re: [shell-script] Re: Duvida sobre impressao de variavel |
Date: |
Thu, 22 Oct 2009 19:06:22 -0200 |
Fala Ivan,
qdo vc faz:
cat - | while ....
o bloco inteiro do while roda em um subshell e qdo esse subshell morre,
todos os valores criados ou alterados no seu interior desaparecem com ele.
Experimente fazer:
while ....
...
...
done < <(cat -)
Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11) 2125-4747;
- Em DF ligue (61) 3223-3000;
- No RJ ligue (21) 2561-0867;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.
2009/10/22 Ivan lopes <address@hidden>
>
>
> solucao:
>
> primeiro pega-se a entrada
> VETOR=(
> $( cat - )
> )
>
> agora usa-se um for para tratar a entrada
>
> ....
> ;-)
>
> 2009/10/22 Ivan lopes <address@hidden <lopesivan.del%40gmail.com>
> >
>
>
> > Amigos pq do erro??? Seria devido ao final da stream de leitura????
> > A varia'vel VETOR aparece vazia fora do loop e nao imprime nada ....
> >
> > OBS: olhem o uso do 'cat -' seguido de pipe
> >
> >
> > =*= Descricao =*=
> >
> > Problema:
> > Variavel aparece com valor nulo.
> >
> > Minha opinião:
> > Eu acho q isso ocorre devido ao final do pipe ...
> >
> > uso:
> > $ ls *.cpp | ./ex.sh
> >
> > saida desejada:
> > $ ls example_01.cpp example_02.cpp example_03.cpp | ./ex.sh
> > VETOR = example_01.cpp
> > VETOR = example_01.cpp example_02.cpp
> > VETOR = example_01.cpp example_02.cpp example_03.cpp
> > VETOR = example_01.cpp example_02.cpp example_03.cpp
> >
> > saida obtida:
> > $ ls example_01.cpp example_02.cpp example_03.cpp | ./ex.sh
> > VETOR = example_01.cpp
> > VETOR = example_01.cpp example_02.cpp
> > VETOR = example_01.cpp example_02.cpp example_03.cpp
> > VETOR =
> >
> >
> > $ ls *.cpp
> > example_01.cpp example_02.cpp example_03.cpp
> >
> > $ cat ex.sh
> > #!/bin/bash
> >
> > declare -a VETOR
> > i=0
> > cat - | while read LINHA
> > do
> > VETOR[i++]=$LINHA
> > echo VETOR = ${VETOR[*]}
> > done
> > # fora do loop!
> > echo VETOR = ${VETOR[*]}
> >
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
[As partes desta mensagem que não continham texto foram removidas]