-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 | Bom dia. Estou lidando com um problema xarope. olhem esse código: | | ... | | compila_projeto(){ | svn list $servidor_svn/tags/ | while read linha; #onde linha recebe a | listagem do repositorio nesse diretorio | do | temp=`echo $linha | sed 's/^.*_//'` # formato da variável $linha = SIP_1.0 | echo $temp # imprime 1.0 | | done | | echo " valor de temporario ${temp}" | | Ao imprimir o $temp, ele nao imprime nada ( ou seja, um espaço em | branco ouuu o que for declarado antes do While) . No entanto, se eu | imprimir dentro, ele imprime o resultado do sed. | Tentei declarar a variavel antes, mas mesmo assim o valor é perdido. | | Alguém tem idéia do porquê disso??
Isso acontece por causa do pipe. Bash não pode abrir um pipe para ele mesmo ( pelo menos não sem um deadlocking), então ele precisa iniciar outro processo para rodar o loop. O outro processo não pode modificar o ambiente do seu processo pai, que é o que você quer fazer. Mudando seu código para algo como: #!/bin/bash compila_projeto(){ ~ while read linha; do ~ temp=$(echo $linha | sed 's/^.*_//') ~ echo $temp ~ done < <(svn list $servidor_svn/tags/) } compila_projeto echo " valor de temporario $temp" tudo funcionará -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Cygwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFIIdDfrDdxWm3R8YYRApACAJ9WvZksnugpV3AzGluxZckiPKyeJgCfeMJ3 ARcfYKwZC4KbN9LOde5HEPk= =fDgi -----END PGP SIGNATURE-----