shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Variável perde o valor, do nada


From: Leandro Santiago
Subject: Re: [shell-script] Variável perde o valor, do nada
Date: Wed, 12 Nov 2008 10:56:17 -0200

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 <address@hidden>

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



reply via email to

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