Este assunto é bastante discutido na lista, e se você procurar no histórico da mesma, achará muita coisa sobre, mas a explicação mais breve é que: Quando você "abre" um novo comando com o pipe, você está realmente criando outro processo, independente do comando anterior. Por isso, quando este termina (no caso, o while), tudo que tem nele vai para o limbo.
Como não fazer isto? while blá ; do lala lala done < <(comando blá); Perceba que o while está recebendo como entrada o comando blá, mas neste caso o while pertence ao programa atualmente em execução. Portanto seus dados não são perdidos. Capisca? 2008/11/12 Paulo Soares Drumond <[EMAIL PROTECTED]> > Pessoal, estou desenvolvendo um shell script que pega todos os > usuários de alguns grupos já existentes para inseri-los em um novo > grupo secundário. A idéia é simples. Este while está no fim do script, > quando eu preparei minha lista com os nomes dos usuários para inserir > na linha de group do novo grupo. > > Acontece que na linha final, lá embaixo, a variável "lstusers" está > aparecendo sempre vazia. No último echo dentro do while, lstusers > aparece normalmente com todos os nomes. O que pode estar acontecendo? > > Para entender, listaIDs contém a lista dos ids dos grupos dos quais > vou pegar os usuários. listaIDs está com o formato ":<id1>: :<id2>: > ...". > > lstusers="" > > cat passwd | while read LINHA > do > idcurr=`echo $LINHA | awk -F: '{print $4}'` > nome=`echo $LINHA | awk -F: '{print $1}'` > > idcurr=":$idcurr:" > > if [ ! -z $idcurr ] > then > achei=`echo $listaIDs | grep -c $idcurr` > if [ $achei -ne 0 ] > then > if [ -z $lstusers ] > then > lstusers=$nome > else > lstusers="$lstusers,$nome" > fi > fi > fi > # Na linha abaixo, lstusers aparece corretamente. > echo "Ao sair do if principal do while lstusers vale $lstusers" > done > > # O problema está na linha abaixo > echo "Lstusers vale $lstusers" > > Paulo > > [As partes desta mensagem que não continham texto foram removidas]