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

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

RES: [shell-script] Erro no shell script


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] Erro no shell script
Date: Tue, 22 Feb 2005 21:39:28 -0300

Caro Tchê,
o nosso colega Gustavo viu a minha referência ao seu nome e (querendo
ajudar) mandou a resposta para vc, porém no contexto linux (que era o
objetivo em sua resposta), a intervençaõ foi extremamente válida.

Eu havia colocado o seu nome só para ter uma outra opinião, pq como vc bem
sabe, tb tenho um monte de servidores unix e no SVR4 o exemplo que te dei
funciona redondinho porém não testei sob o SCO. Me diga uma coisa: o erro
que ele deu não seria em ((i++))? Faça um favor, substitua essa linha por
let i++ e teste novamente, só para me tirar esse grilo das idéias. :)

Veja o meu artigo de ontem (ou de hoje) no endereço abaixo da minha
assinatura, que lá eu mato a cobra e mostro o pau.

[ ]s,
Julio
Esta é a semana
Julio Neves nas Dicas-L
http://www.dicas-l.unicamp.br/dicas-l/
IMPERDÍVEL!!!


| -----Mensagem original-----
| De: Rodolfo Villanova
| [mailto:address@hidden]
| Enviada em: terça-feira, 22 de fevereiro de 2005 17:11
| Para: address@hidden
| Assunto: RES: [shell-script] Erro no shell script
| 
| 
| 
| Caro amigo Gustavo,
| 
| Um pequeno reparo à tua conjectura: no teste realizado dentro 
| de um arquivo,
| me preocupei em incluir na primeira linha a famosa:
| 
| #!/bin/ksh
| 
| Não pude testar a proposta do Julio, incluindo na primeira linha
| #!/bin/bash, em razão de os servidores em que trabalho não 
| possuirem o bash
| instalado (e nem me é autorizado instalá-lo).
| 
| Abraços a todos,
| --------------------------
| Rodolfo D. Gross Villanova
| 
| > -----Mensagem original-----
| > De: address@hidden [mailto:address@hidden]
| > Enviada em: terça-feira, 22 de fevereiro de 2005 16:49
| > Para: address@hidden
| > Assunto: Re: [shell-script] Erro no shell script
| >
| >
| >
| > >>>>> On Tue, 22 Feb 2005 15:09:14 -0300, Julio Cezar Neves -
| > DATAPREVRJ <address@hidden> said:
| >
| >   > 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.
| >
| > Manter o ambiente do loop ou melhorar o desempenho geral do script
| > pode até ser importante, mas o problema imediato do Rodolfo era
| > descobrir a causa do erro sintático que ele estava obtendo.
| >
| >   > 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ê!
| >
| > Testei na linha de comando e funcionou.  Então, porque quando eu
| > testei com o código original do Rodolfo ligeiramente adaptado deu o
| > mesmo erro?
| >
| >     $ cat >r.sh <<EOF
| >     while read user; do
| >        if [ -d $user -a ! -z "$(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)
| >     EOF
| >     $ sh r.sh
| >     r.sh: line 6: syntax error near unexpected token `<'
| >     r.sh: line 6: `done < <(ls home)'
| >         $
| >
| > Ah!  O que me enganou foi chamar a shell de 'sh'.  No Linux, sh é um
| > link simbólico pra bash mas não funciona igual.  Veja a parte
| > relavante do manpage:
| >
| >     If bash is  invoked with the name sh, it  tries to mimic the
| >     startup behavior of historical  versions of sh as closely as
| >     possible, while  conforming to  the POSIX standard  as well.
| >
| > Como a 'sh' original não suporta '<(...)', a bash também dá erro
| > quando chamada como 'sh'.  Quando eu chamo explicitamente como bash
| > funciona:
| >
| >     $ bash r.sh
| >         $
| >
| > Assim como funciona se eu chamar o arquivo diretamente:
| >
| >         $ chmod +x r.sh
| >         $ ./r.sh
| >         $
| >
| > Logo, minha próxima conjectura (caro Rodolfo) é que o seu script tem
| > "#!/bin/sh" na primeira linha ou que você o esteja chamando
| > diretamente como "sh <script>".  Experimente substituir a primeira
| > linha por "#!/bin/bash" ou chamá-lo como "bash <script>" 
| pra ver se o
| > problema se resolve.
| >
| > 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
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| ---------------------------------------------------------------------
| 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




 




reply via email to

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