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

[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]



reply via email to

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