[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: RES: [shell-script] Erro no shell script
From: |
Julio Cezar Neves - DATAPREVRJ |
Subject: |
RES: RES: [shell-script] Erro no shell script |
Date: |
Tue, 22 Feb 2005 15:09:14 -0300 |
Quequeisso gente!
Sob o Bash:
Prompt> while read arq; do ((i++)); echo Arq$i:$arq; done < <(ls)
Arq1:a
Arq2:AA
Arq3:aaas
Arq4:arch
Arq5:arq1
Arq6:arq10
Arq7:arq2
Prompt> echo $i
7
Faça o mesmo com ls | while ... e ao fim do processo tente achar o valor de
$i. Impossível! Isso pq o pipe criou um subshell que além de onerar a
máquina, perdeu todo o ambiente criado no seu interior após o seu término.
O nome disso é substituição de procecesso e eu *asseguro* a vcs que o bash e
o ksh (a não ser que estejam capengas) suportam.
Rodolfo, testa isso aí no ksh e conta para a lista, Tchê!
[ ]s,
Julio
:wq
| -----Mensagem original-----
| De: Gustavo Chaves [mailto:address@hidden]
| Enviada em: terça-feira, 22 de fevereiro de 2005 14:50
| Para: address@hidden
| Assunto: Re: RES: [shell-script] Erro no shell script
|
|
|
| >>>>> On Tue, 22 Feb 2005 13:29:32 -0300, "Renato L. Sousa"
| <address@hidden> said:
|
| > Hummmm... Estou usando o bash (/bin/bash), e pelo q vi o
| sh no linux é
| > um link pro bash, então deveria funcionar, não ???
|
| Acho que sim. Mas consegui reproduzir seu problema aqui. Também não
| entendi... parece que a bash não entende o redirecionamento de
| processos depois de um while...done.
|
| >> | while read user; do
| >> | if [ -d $user -a $(grep -w $user /etc/passwd) ]; then
| >> | echo -ne "Atribuindo quota do usuário $user...\t"
| >> | edquota -u $dir -p quota_model && echo "OK" ||
| echo "Falhou"
| >> | fi
| >> | done < <(ls /home)
|
| Consegui contornar o problema usando pipe ao invés do redirecionador.
| Assim:
|
| ls /home | while read user; do
| ...
| done
|
| Mas há outro problema. Você deve colocar aspas em torno do $(grep...)
| pois se ele não voltar nada o comando test (a.k.a. "[") vai reclamar
| da falta de um argumento. A versão final ficaria assim:
|
| ls /home | while read user; do
| if [ -d $user -a "$(grep -w $user /etc/passwd)" ]; then
| echo -ne "Atribuindo quota do usuário $user...\t"
| edquota -u $dir -p quota_model && echo "OK" ||
| echo "Falhou"
| fi
| done
|
| Gustavo.
|
|
| ---------------------------------------------------------------------
| Esta lista não admite a abordagem de outras liguagens de
| programação, como perl, C etc. Quem insistir em não seguir
| esta regra será moderado sem prévio aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Links do Yahoo! Grupos
- RES: RES: [shell-script] Erro no shell script,
Julio Cezar Neves - DATAPREVRJ <=