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: Julio C. Neves
Subject: Re: [shell-script] Resgatendo valor de uma variável em um loop while
Date: Sat, 5 Mar 2011 22:42:20 -0300

Fabrício, sinto muito informá-lo, mas vc se enganou... ;) Um shell pai
exporta dados para o filho, neto, tatatatatatataraneto, mas não exporta para
o pai :(

Experimente...

 Abraços,

Julio

*Cursos de Shell ou Zenity em fins de semana?*

*☎ Ligue (21) 8112-9988* ☎
Contacte-me [image: Twitter] <http://@juliobash>


Em 5 de março de 2011 22:06, Fabricio Candido
<address@hidden>escreveu:

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


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



reply via email to

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