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 <[email protected]> > > > solucao: > > primeiro pega-se a entrada > VETOR=( > $( cat - ) > ) > > agora usa-se um for para tratar a entrada > > .... > ;-) > > 2009/10/22 Ivan lopes <[email protected] <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]
