O comando read não é executado

1. O comando read não é executado

Tiago Araújo da Costa
intpa

(usa Linux From Scratch)

Enviado em 25/01/2016 - 09:14h

Ao digitar a seguinte sequência de comandos no bash retorna esta saída:

$cat cadastro_sisvan.sh | grep -A 1 "comando_ogait" | tail -1

./sigss.sh -l ; numero_nao_listados=`cat lista_de_nomes_inexistentes_no_sisvan_web.txt | wc -l` ; for num in $( seq 1 "$numero_nao_listados" ); do linha_paciente_nao_listado=`cat lista_de_nomes_inexistentes_no_sisvan_web.txt | sed -n ${num}p` ; nome_paciente_formatado_sigss=`echo "$linha_paciente_nao_listado" | cut -d ";" -f 2 | sed -r 's/ +/ /g' | sed -s 's/\ $//g' | sed -s 's/\ JPA\ /\n_____JPA/g' | sed -s 's/\ JARDIM\ /\n_____/g' | sed -s 's/(ESF/\n_____ESF/g' | sed -s 's/\ ESF\ /\n_____ESF/g' | sed -s 's/\ ESF$/\n_____ESF/g' | sed -s 's/\ ESF[\ XIV.1234567890][\ .XIV1234567890$]/\n_____ESF/g' | sed -s 's/ESF[\ XIV.1234567890][\ .XIV1234567890$]/\n_____ESF/g' | sed -s 's/\ EF[\ XIV.1234567890][\ .XIV1234567890$]/\n_____ESF/g' | sed -s 's/ESF[\ XIV.1234567890]/\n_____ESF/g' | sed -s 's/\ EF[\ XIV.1234567890]/\n_____ESF/g' | sed -s 's/\ -\ PIONEIR/\n_____PIONER/g' | sed -s 's/\ -\ PIONERI/\n_____PIONER/g' | sed -s 's/-(PIONEIR/\n_____PIONEIR/g' | sed -s 's/\ (PIONEIR/\n_____PIONEIR/g' | sed -s 's/\ PIONEIR/\n_____PIONEIR/g' | sed -s 's/\ PIONERI/\n_____PIONEIR/g' | sed -s 's/\ PM/\n_____PM/g' | sed -s 's/\ PX/\n_____PX/g' | sed -s 's/\ PCX/\n_____PCX/g' | sed -s 's/\ XPM/\n_____XPM/g' | sed -s 's/\ XX/\n_____XX/g' | sed -s 's/\ PC/\n_____PC/g' | sed -s 's/[0123456789]/\n_____numero/g' | sed -s 's/\ III$/\n_____III/g' | sed -s 's/\ II$/\n_____II/g' | sed -s 's/\ EF\ /\n_____ESF/g' | sed -s 's/\ XI$/\n_____ESF/g' | sed -s 's/\ XI\ /\n_____ESF/g' | sed -s 's/\ IV$/\n_____ESF/g' | sed -s 's/\ IV\ /\n_____ESF/g' | sed -s 's/\ VIII$/\n_____ESF/g' | sed -s 's/\ VIII\ /\n_____ESF/g' | sed -s 's/\ (XI)$/\n_____ESF/g' | sed -s 's/\ \.\ /\n_____ponto/g' | sed -s 's/\ \.$/\n_____ponto/g' | sed -s 's/\ IC\ /\n_____IC/g' | sed -s 's/\ IC$/\n_____IC/g' | sed -s 's/\ V\ /\n_____ESF/g' | sed -s 's/\ V$/\n_____ESF/g' | sed -s 's/[ (]PROVIS[OÓ]RIO/\n_____PROVI/g' | sed -s 's/-\ /\n_____traco/g' | sed -s 's/\//\n_____barra/g' | grep -va "_____" | sed -s 's/\ $//g'` ; data_nascimento_sigss=`echo "$linha_paciente_nao_listado" | cut -d ";" -f 3` ; nis_sigss=`echo "$linha_paciente_nao_listado" | cut -d ";" -f 1` ; endereco_paciente_arquivo_morto=`grep -R -a "${nis_sigss};${nome_paciente_formatado_sigss};${data_nascimento_sigss}" ../arquivo_morto/* | cut -d ":" -f 2 | cut -d ";" -f 2 | sort | uniq` ; ./sigss.sh -u "$nome_paciente_formatado_sigss" "$data_nascimento_sigss" ; linha_dados_paciente_sigss="" ; for relatorio_sigss_linha in relatorio_sigss_*.txt ; do dados_paciente_for=`cat "$relatorio_sigss_linha" | grep ";"` ; linha_dados_paciente_sigss=`echo -e "${linha_dados_paciente_sigss}\n${dados_paciente_for}" | grep ";"` ; done ; numero_linhas_dados_paciente_sigss=`echo "$linha_dados_paciente_sigss" | wc -l` ; if [ "$numero_linhas_dados_paciente_sigss" -eq "1" ]; then relatorio_sigss=`grep -R -H "${linha_dados_paciente_sigss}" relatorio_sigss_*.txt | cut -d ":" -f 1` ; else echo "Escolha as informações corretas do paciente que foi acompanhado no sisvan do sigss, mas não está cadastrado no sisvan web" ; for nume in $( seq 1 "$numero_linhas_dados_paciente_sigss" ); do linha_opcao_dados_paciente=`echo "$linha_dados_paciente_sigss" | sed -n ${nume}p` ; echo "${nume}) ${linha_opcao_dados_paciente}" ; done ; echo "pre read" ; read opcao ; echo "$opcao" ; dados_paciente_escolhido=`echo "$linha_dados_paciente_sigss" | sed -n ${opcao}p` ; relatorio_sigss=`grep -R -H "${dados_paciente_escolhido}" relatorio_sigss_*.txt | cut -d ":" -f 1` ; fi ; echo "$relatorio_sigss" ; rm -f relatorio_sigss_*.txt ; done

Ao digitar o seguinte comando no bash o resultado acima também é executado como um shell script:

$cat cadastro_sisvan.sh | grep -A 1 "comando_ogait" | tail -1 | bash

O problema é que o comando "read opcao" não é executado, ou seja, simplesmente é pulado de forma que a variável $opcao fica vazia, comprometendo os comandos seguintes.

Alguma sugestão?


Aguardo ansiosamente pela correção.

Atenciosamente,

Tiago


  


2. Nota que esqueci de adicionar na pergunta

Tiago Araújo da Costa
intpa

(usa Linux From Scratch)

Enviado em 19/03/2016 - 13:33h

O problema ocorre independente da distro. Mas, se colocado dentro de um shell script e posteriormente executado, ele funciona normalmente.


3. Re: O comando read não é executado

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/03/2016 - 13:37h

Tenho até medo de testar porque está um pouco obscuro.
E o arquivo de fonte a ser passado pelos SEDs?

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Re: O comando read não é executado

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/03/2016 - 14:23h

tiagoarcosta escreveu:
O problema ocorre independente da distro. Mas, se colocado dentro de um shell script e posteriormente executado, ele funciona normalmente.

------------------------------------------------------
Boa tarde.
Poste a saída de cat cadastro_sisvan.sh com a TAG "código"
No aguardo,
marcelo



5. Re: O comando read não é executado

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/03/2016 - 14:25h

Você já deu uma olhada nas possíveis opções do comando read?

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



6. Re: O comando read não é executado

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/03/2016 - 01:15h

Boa noite, tiagoarcosta.
Simulei o trecho "read opcao":

if [ "$numero_linhas_dados_paciente_sigss" -eq "1" ];then
relatorio_sigss=`grep -R -H "${linha_dados_paciente_sigss}" relatorio_sigss_*.txt | cut -d ":" -f 1`
else
echo "Escolha as informações corretas do paciente que foi acompanhado no sisvan do sigss, mas não está cadastrado no sisvan web"
for nume in $( seq 1 "$numero_linhas_dados_paciente_sigss" );do
linha_opcao_dados_paciente=`echo "$linha_dados_paciente_sigss" | sed -n ${nume}p`
echo "${nume}) ${linha_opcao_dados_paciente}"
done
echo "pre read"
read opcao
echo "$opcao"
dados_paciente_escolhido=`echo "$linha_dados_paciente_sigss" | sed -n ${opcao}p`
relatorio_sigss=`grep -R -H "${dados_paciente_escolhido}" relatorio_sigss_*.txt | cut -d ":" -f 1`
fi

Efetuei uns testes e funcionou, segue:
#!/bin/bash
NM=$(wc -l < NUMEROS.txt)
if (($NM > 10));then
echo "TESTANDO. . ."
else
for X in $(seq 1 $NM);do
Num=$(sed -n "$X"p NUMEROS.txt)
read -p "ESCOLHA A OPÇãO: " -e opcao
echo -e "X:$X::Num:$Num::Op:$opcao\n"
done
fi


cat NUMEROS.txt
UM
DOIS
TRES
QUATRO
CINCO
SEIS
SETE
OITO
NOVE
DEZ


SAíDA
ESCOLHA A OPÇãO: 1
X:1::Num:UM::Op:1

ESCOLHA A OPÇãO: 2
X:2::Num:DOIS::Op:2

ESCOLHA A OPÇãO:

Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como MELHOR, dessa forma, ganho uns pontinhos, o que incentiva a continuar colaborando/ajudando/participando/compartinhando . . . :)
att.:
marcelo oliver



  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts