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: rudsonalves
Subject: Re: [shell-script] Resgatendo valor de uma variável em um loop while
Date: Sun, 06 Mar 2011 13:38:11 -0300
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101209 Thunderbird/3.1.7

Está em meus bookmarks de shell Julio, valeu.

Eu já havia tentado o export Fabricio, de pai para filho, mas não 
funcionou. O filho recebe o valor mas não exporta, como o Júlio comentou.

Valeu.

> Fala Rudson,
> é uma pena que vc não conseguiu acessar o link que passei, mas acabei 
> de ver
> o cara que cuida da infra do site passar por aqui fantasiado de 
> baiana... ;)
>
> Brincadeiras à parte, creio que ele não ficará fora por muito tempo, pois
> tem muito material importante lá. acho tb que vc deveria tentar novamente
> amanhã, pois o material que passei para vc ler é muito útil e quebra
> diversos galhos.
>
> Abraços,
>
> Julio
>
> *Cursos de Shell ou Zenity em fins de semana?*
>
> *☎ Ligue (21) 8112-9988* ☎
> [image: Twitter] <http://@juliobash>@juliobash
>
> Em 5 de março de 2011 08:48, rudsonalves <address@hidden 
> <mailto:rudsonalves%40yahoo.com.br>>escreveu:
>
> >
> >
> > 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>
> > > <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]