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: Rodolfo Villanova
Subject: RES: [shell-script] Erro no shell script
Date: Tue, 22 Feb 2005 17:11:22 -0300

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











reply via email to

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