On Wed, 12 Feb 2003, Dorian Bolivar wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Ol�, > > On Wednesday, 12 February 2003 18:00, Paulino Kenji Sato wrote: > > Considere o seguinte bash script: > > #!/bin/bash > > CONTADOR=0 > > find $1 -name "*.jpg" | while read f; do > > #faz um monte de coisas aqui > > CONTADOR=$[ $CONTADOR + 1 ] > > done > > echo "N�mero de arquivos processados: $CONTADOR" > > > > Ao executar esse script, o $CONTADOR sempre esta com o valor inicial > > 0. Eu sei por que isso acontece, o pipe abre uma nova shell. > > Como fazer para ter o valor atualizado do $CONTADOR? > > Se eu entendi +/- o problema, pergunto: voc� j� experimentou exportar a > vari�vel para o ambiente, tanto na declara��o quanto na atualiza��o?
Sim, olha (1) #!/bin/bash C=0 export C head -1 /etc/passwd | while read f; do echo $f C=$f export C done echo "C = $C" $ ./x root:x:0:0:root:/root:/bin/bash C = 0 agora se fa�o (2) #!/bin/bash C=0 export C head -1 /etc/passwd | ( while read f; do echo $f C=$f export C done echo "C = $C" ) $ ./x root:x:0:0:root:/root:/bin/bash C = root:x:0:0:root:/root:/bin/bash Explica��o: (pelo que entendi) No (1) o pipe (|) abre uma nova shell, e herda as variaveis, mas n�o consegue devolver o que herdou ao seu ascendente. No caso (2) tambem cria uma nova shell, mas o par () e usando para agrupar os comandos, todo o resto da execu��o ocorreu no shell filho. O pai come�a o servi�o e deixa para o filho terminar. Um "scripteiro" casual como eu n�o lembra de usar o () para agrupar, mesmo tendo o livro de bash a m�o. :) Assinantes em 12/02/2003: 2246 Mensagens recebidas desde 07/01/1999: 201024 Historico e [des]cadastramento: http://linux-br.conectiva.com.br Assuntos administrativos e problemas com a lista: mailto:[EMAIL PROTECTED]
