[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Falha no comando read
From: |
rodvilla |
Subject: |
Re: Falha no comando read |
Date: |
Fri, 23 Mar 2007 17:13:32 -0200 |
Caros Senhores,
Agradeço por oxidarem fosfato na tentativa de me ajudar, mas infelizmente o
problema não está onde apontam.
# ----
Flávio, obrigado pela contribuição, mas o comando read no script está se
comportando de duas formas diferentes.
Em linhas em sequencia, sem aninhamento, o read funciona como esperado.
Ele só não funciona quando fica dentro de comandos "if" aninhados. No caso,
a linha em que ele não funciona está num 5. nivel de aninhamento.
# ----
Julio, me perdoe, pois no trecho que recortei e enviei havia omitido o "}",
mas ele está lá presente no script.
Na hipótese que apontas, o interpretador acusaria a falha na primeira
execução, registrando fim de arquivo inesperado:
==> TESTE.bsh: line 284: syntax error: unexpected end of file
De toda forma fico-lhe muito grato pela manifestação.
Te passo meu telefone, sim, mas estou há quase um ano morando em Sao
Paulo!!! - Ah! Que saudades do meu Rio Grande...(rs)
# ----
Tiago, agradeço o teu esforço também. Cheguei a deslocar o trecho com o
"read" pra uma chamada de funcao que executasse somente as linhas com o
problema, mas não obtive o esperado sucesso.
As questões que não querem calar são:
- Qual a razão de a linha com o comando read ser lida pelo interpretador
Bash e não executada como esperado?
- Será que linha com comando read não funciona dentro de "if´s" aninhados
nesse release do Bash?
Destaco e comparo os traces das execuções dos dois trechos que possuem o
comando:
Um que não executa, e outro que executa o comando read normalmente.
Veja logo a seguir:
+ read -p 'Escolha entre (a)tualizar ou (n)ao a configuracao no B-router: '
VAR
+ echo 'VAR = <>'
VAR = <>
No trecho do trace exibido acima, o comando não é apresentado e não pára pra
receber o valor que seria atribuído à variável VAR...
A execução passa reto, como se o comando não existisse!!!
Já nesse outro trecho do mesmo script, abaixo, a linha do script é
apresentada, é executada (pára pra receber o dado do teclado),
e continua a execução normalmente, após acionar a tecla <ENTER>:
read -p "Pressione <ENTER> para continuar..."
+ read -p 'Pressione <ENTER> para continuar...'
Pressione <ENTER> para continuar...
Eu já abri o arquivo do script com o vi, acionei o "set list" e nenhum
caracter estranho aparece, a não ser aquele normal de fim de linha ($).
Será que o comando não funciona em razão do nível de aninhamento de if´s?
Não lembro de ter ouvido falar de nenhum compilador ou interpretador com
esse tipo de limitação...
De toda forma, obrigado!
Vou tentar algum outro artifício pra contornar o problema!
Grato a todos,
Rodolfo Villanova
Telefonica Empresas
São Paulo - SP
#--------------------------------------------------------------------
> Re: Falha no comando read
> Enviado por: "Flavio Junior" address@hidden
> Qui, 22 de Mar de 2007 5:49 pm
> O unico "erro" que eu vi, é que VAR deve estar na frente do prompt
>
> "erro" por que isso pode ter ocorrido devido ao corpo da msg no email,
> exemplo:
>
> read -p "Testee: " VAR
> XXXXXXXXXX<enter>
> echo $VAR
> XXXXXXXXXX
>
> Será isso?
>
> Flavio do Carmo Junior
#-------------------------------------------------------------------
> Re: Falha no comando read
> Enviado por: "Julio C. Neves" address@hidden julioneves99
> Qui, 22 de Mar de 2007 7:44 pm
> Fala Tchê,
> estava te achando sumido e agora descobri que é pq estavas freqüentando na
> varanda da saudade? ;)
>
> Agora sério: além de ter de especificar a variável na frente do prompt,
está
> faltando um fecha chaves antes da main.
>
> if [ -z "$VAR" -o "$VAR" = "n" ]; then
> return
> fi
> } <<<<=== Este aqui...
> # ...
> #
> # Main
>
> Vê se não some. Me mande seu tel em pvt para tomarmos um chope durante o
> FISL.
>
> Abração,
> Julio
#------------------------------------------------------------------------------
> Re: Falha no comando read
> Enviado por: "Tiago Barcellos Peczenyj" address@hidden
grande_uosh
> Qui, 22 de Mar de 2007 6:08 pm
> Se o read não tem uma variavel especificada, vai pra uma variavel chamada
> REPLY
>
> # read -p "digite algo: "
> digite algo: asd
> # echo $REPLY
> asd
>
> Agora...vc poderia usar o select
>
> $ echo "Escolha entre (a)tualizar ou (n)ao a configuracao no B-router: "
> $ PS3='opcao: '
> $ select OPT in A N; do echo $OPT ; done
>
> Escolha entre (a)tualizar ou (n)ao a configuracao no B-router:
> 1) A
> 2) N
> opcao: 1
> A
> opcao: 4
>
> opcao:
>
> Ai é só colocar um if ou case dentro do select ;-)
#------------------------------------------------------------------------------
>> Falha no comando read
>> Enviado por: "rodvilla" address@hidden rodolfovillanova
>> Qui, 22 de Mar de 2007 5:38 pm
>> Caros amigos,
>>
>> Ao cumprimentar os novos amigos e os antigos (andei fazendo papel de
>> saudosista e reli algumas das primeiras mensagens da lista, que este ano
vai
>> completar 7 anos, lembra, Eriberto, Julio?).
>> Apelo a todos vocês antes que vá até um terreiro pra pedir ajuda a um
>> pai-de-santo, porque já tentei resolver esse problema de diferentes
formas e
>> não consegui encontrar uma razão plausível para o que está ocorrendo.
>>
>> Abaixo segue algumas partes do script que elaborei.
>> Num determinado trecho desse bash script, inseri um comando "read" para
que
>> o usuário, em prompt de comando, decida que ação tomar.
>> Acontece que nessa linha o comando read não funciona; no entanto, em
>> determinados trechos, de teste, ele funciona, mesmo que não utilize uma
>> variável para receber um valor de entrada!
>> Segue a parte em que o comando não funciona e a que funciona (teste), bem
>> como o trace de execução.
>> Segue também a localização do bash e a versão do bash que utilizo.
>> Não localizei na internet nenhuma referência a alguma limitação ou bug
desse
>> release de bash.
>>
>> $ which bash
>> /usr/bin/bash
>> $ /usr/bin/bash -version
>> GNU bash, version 2.05.0(1)-release (sparc-sun-solaris2.9)
>> Copyright 2000 Free Software Foundation, Inc.
>>
>> Seguem partes do código:
>>
>> #!/usr/bin/bash -xv
>> #
>> #...
>> #
>> # Funcoes
>> checa_cfg_sonda ()
>> {
>> # ...
>> echo
>> read -p "Escolha entre (a)tualizar ou (n)ao a configuracao no B-router: "
>> VAR
>> echo "VAR = <$VAR>"
>> echo
>> if [ -z "$VAR" -o "$VAR" = "n" ]; then
>> return
>> fi
>> # ...
>> #
>> # Main
>> #
>> # ...
>> checa_cfg_sonda
>> # ...
>> #### TESTE
>> read -p "Pressione <ENTER> para continuar..."
>> #### TESTE
>> # fim do Bash script
>>
>> ------------------
>> Trace da execução:
>> ------------------
>> ...
>>
>> + echo
>>
>> + read -p 'Escolha entre (a)tualizar ou (n)ao a configuracao no B-router:
' VAR
>> + echo 'VAR = <>'
>> VAR = <>
>> + echo
>>
>> + '[' -z '' -o '' = n ']'
>> + return
>>
>> ...
>>
>> #### TESTE
>> read -p "Pressione <ENTER> para continuar..."
>> + read -p 'Pressione <ENTER> para continuar...'
>> Pressione <ENTER> para continuar...
>> #### TESTE
>> #------------------------
>>
>> Ficarei humilde e imensamente agradecido a quem puder apontar uma luz,
pois
>> já esmiucei o arquivo de ponta à cabeça e não consegui encontrar uma
>> explicação que não fosse uma "mariposa" obliterando um relé!... (rs)
>>
>> Grato,
>>
>> Rodolfo Villanova
[As partes desta mensagem que não continham texto foram removidas]