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

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

Re: [shell-script] Resgatendo valor de uma variável em um loop while


From: Fabricio Candido
Subject: Re: [shell-script] Resgatendo valor de uma variável em um loop while
Date: Sat, 5 Mar 2011 22:06:58 -0300

Pessoal, boa noite.

   Vou tentar ajudar com meus 0,2% (Julio, não me xingue se eu estiver
errado): se export da variavel LIST dentro do loop ?

Espero ter ajudado :D

[]s

Fabricio Candido.


2011/3/5 rudsonalves <address@hidden>

>
>
> Olá Júlio,
>
> Valeu o esclarecimento. Imaginei que fosse algo assim.
>
> A propósito o link para o botequim não está funcionando.
>
> [[]]'s
>
>
> > Fala Rudson,
> > esse é um erro comum. O que ocorre é que o pipe cria um subshell para
> > interpretar o while e neste ambiente a variável $LIST é incrementada, mas
> > qdo o while termia, essa subshell morre e a variável morre junto.
> >
> > A saída para isso é redirecionar a entrada primária com um menor que (<),
> > porém esse redirecionamento sá pode ser feito de um arquivo e o que vc
> > tem é
> > uma instrução (find) a saída então é usar uma substituição de
> > processos, que
> > executa a instrução como se fosse um arquivo.
> >
> > Dessa forma, seu script ficaria assim:
> >
> > LIST=""
> > while read F; do
> > if xz -t $F 2>/dev/null; then
> > echo "[Ok] - $F";
> > else
> > echo -e "\e[31;1m[Error] $F\e[m"; LIST="$LIST\n$F";
> > fi;
> > done < <(find xap/. -name *.txz)
> > echo -e "List of Erros: $LIST"
> >
> > Para entender bem esse conceito, que é fundamental para desenv. scripts,
> > leia o que escrevi aqui no
> > botequim<
> http://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo011#Named_Pipes>.
> > Lá tem, por coincidência, um script muito semelhante ao seu, inclusive
> > pq a
> > variável usada tb é $LIST. Leia desde esse link até o fim da página.
> >
> > Abraços,
> >
> > Julio
> >
> > *Cursos de Shell ou Zenity em fins de semana?*
> >
> > *☎ Ligue (21) 8112-9988* ☎
> >
> > Em 1 de março de 2011 09:28, Rudson <address@hidden
> > <mailto:rudsonalves%40yahoo.com.br>> escreveu:
>
> >
> > >
> > >
> > > Olá pessoal,
> > >
> > > Fiz um loop para verificar os arquivos xz com defeito em alguns
> > > sub-diretórios.
> > >
> > > O loop:
> > >
> > > LIST=""; find xap/. -name *.txz | while read F; do if xz -t $F
> > 2>/dev/null;
> > > then echo "[Ok] - $F"; else echo -e "\e[31;1m[Error] $F\e[m";
> > > LIST="$LIST\n$F"; fi; done; echo -e "List of Erros: $LIST"
> > >
> > > O loop em si funcionou muito bem, mas tive um retorno o qual não
> > > compreendi, da variável LIST.
> > >
> > > A meu ver, esta variável deveria conter os nomes dos arquivos com
> > erro na
> > > compactação, ao final do loop. Verifiquei com o debug de linha de
> > comando
> > > (set -x) e vi que a variável LIST estava sendo preenchida
> > adequadamente, mas
> > > ao final do loop, seu valor é perdido, retornando uma string vazia.
> > >
> > > ...
> > > + echo -e '\e[31;1m[Error] xap/./blackbox-0.70.1-x86_64-4.txz\e[m'
> > > [Error] xap/./blackbox-0.70.1-x86_64-4.txz
> > > + LIST='\nxap/./blackbox-0.70.1-x86_64-4.txz'
> > > ...
> > > + echo -e '\e[31;1m[Error] xap/./sane-1.0.22-x86_64-1.txz\e[m'
> > > [Error] xap/./sane-1.0.22-x86_64-1.txz
> > > +
> > >
> >
> LIST='\nxap/./blackbox-0.70.1-x86_64-4.txz\nxap/./sane-1.0.22-x86_64-1.txz'
> > > + read F
> > > ...
> > > + read F
> > > + echo -e 'List of Erros: '
> > > List of Erros:
> > >
> > > Como pode ser visto acima, a variável é preenchida adequadamente, mas
> no
> > > echo final ela parece desaparecer. Verifiquei com um echo após a
> > execução e
> > > a variável está mesmo vazia. Me parece algum problema de escopo de
> > variável
> > > ou no meu bash, realmente não sei.
> > >
> > > Aqui, segue a linha aberta para ficar mais claro:
> > >
> > > LIST=""
> > > find xap/. -name *.txz | while read F; do
> > > if xz -t $F 2>/dev/null; then
> > > echo "[Ok] - $F";
> > > else
> > > echo -e "\e[31;1m[Error] $F\e[m"; LIST="$LIST\n$F";
> > > fi;
> > > done;
> > > echo -e "List of Erros: $LIST"
> > >
> > > Alguém poderia explicar isto?
> > >
> > >
> > >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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