[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