Variável com saída de um comando

1. Variável com saída de um comando

Caroline Kieling
Kieling

(usa CentOS)

Enviado em 22/06/2017 - 09:22h

Eu sei que em geral isso é algo muito simples mas estou tendo um problema e já tentei todas as formas que conheço =/

Tenho um script em bash e no final dele faço alguns testes pra ver se deu tudo certo e informar ao usuário.

nroLinhas=`cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
if [ "${nroLinhas}" = "0" ]; then
...
fi

Só que por alguma razão do destino, a saída do comando abaixo não fica armazenada dentro da minha variável =/
Se eu executo esse mesmo comando direto na shell, o retorno é o esperado.
# cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1
2


Tentei usar essas outras síntaxes e nada
nroLinhas=$(cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1);

for nroLinhas in `cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
do
...
done


Alguma outra idéia?

Obrigada!

PS: Isso acontece em uma parte do meu script que é executado com "sudo -s <<EOF".


  


2. Re: Variável com saída de um comando

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/06/2017 - 10:59h

Kieling escreveu:

Eu sei que em geral isso é algo muito simples mas estou tendo um problema e já tentei todas as formas que conheço =/

Tenho um script em bash e no final dele faço alguns testes pra ver se deu tudo certo e informar ao usuário.

nroLinhas=`cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
if [ "${nroLinhas}" = "0" ]; then
...
fi

Só que por alguma razão do destino, a saída do comando abaixo não fica armazenada dentro da minha variável =/
Se eu executo esse mesmo comando direto na shell, o retorno é o esperado.
# cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1
2


Tentei usar essas outras síntaxes e nada
nroLinhas=$(cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1);

for nroLinhas in `cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
do
...
done


Alguma outra idéia?

Obrigada!


Olá. Não deveria ser

nroLinhas=`cat /tmp/result-envia-tabela | grep 'rows' | cut -d " " -f1 | tail -1`
if [ "${nroLinhas}" = "0" ]; then
...
fi


?

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

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



3. Re: Variável com saída de um comando

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/06/2017 - 11:10h

Kieling escreveu:

Eu sei que em geral isso é algo muito simples mas estou tendo um problema e já tentei todas as formas que conheço =/

Tenho um script em bash e no final dele faço alguns testes pra ver se deu tudo certo e informar ao usuário.

nroLinhas=`cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
if [ "${nroLinhas}" = "0" ]; then
...
fi

Só que por alguma razão do destino, a saída do comando abaixo não fica armazenada dentro da minha variável =/
Se eu executo esse mesmo comando direto na shell, o retorno é o esperado.
# cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1
2


Tentei usar essas outras síntaxes e nada
nroLinhas=$(cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1);

for nroLinhas in `cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
do
...
done


Alguma outra idéia?

Obrigada!


Bom dia, Kieling.
Segue sugestão:
NroLinhas=$(awk '/rows/{print $1}' /temp/result-envia-tabela |tail -1) 


Se posível, poste o /temp/result-envia-tabela

Att.:
Marcelo Oliver



4. Re: Variável com saída de um comando

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/06/2017 - 11:13h

O diretório é /temp/ na raiz? Ou é /tmp/ na raiz? Ou é outro diretório? Preciso dessa confirmação. Dependendo é só um erro de digitação lá atrás onde talvez corrigi e deixei em negrito. Pode não ser isto também.


5. Re: Variável com saída de um comando

Marcos Felipe
plimo263

(usa Ubuntu)

Enviado em 22/06/2017 - 11:59h

Kieling escreveu:

Eu sei que em geral isso é algo muito simples mas estou tendo um problema e já tentei todas as formas que conheço =/

Tenho um script em bash e no final dele faço alguns testes pra ver se deu tudo certo e informar ao usuário.

nroLinhas=`cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
if [ "$nroLinhas" = "0" ]; then
...
fi

Só que por alguma razão do destino, a saída do comando abaixo não fica armazenada dentro da minha variável =/
Se eu executo esse mesmo comando direto na shell, o retorno é o esperado.
# cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1
2





Tentei usar essas outras síntaxes e nada
nroLinhas=$(cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1);

for nroLinhas in `cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
do
...
done


Alguma outra idéia?

Obrigada!


Boa tarde, se tua saída gera numeros tentou fazer a pesquisa desta forma ?

nroLinhas=`cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
if [ "${nroLinhas}" -eq 0 ]; then
...
fi




6. executa com . ou source

Diogo
dmap

(usa Ubuntu)

Enviado em 22/06/2017 - 13:35h

Kieling escreveu:

Eu sei que em geral isso é algo muito simples mas estou tendo um problema e já tentei todas as formas que conheço =/

Tenho um script em bash e no final dele faço alguns testes pra ver se deu tudo certo e informar ao usuário.

nroLinhas=`cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
if [ "${nroLinhas}" = "0" ]; then
...
fi

Só que por alguma razão do destino, a saída do comando abaixo não fica armazenada dentro da minha variável =/
Se eu executo esse mesmo comando direto na shell, o retorno é o esperado.
# cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1
2


Tentei usar essas outras síntaxes e nada
nroLinhas=$(cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1);

for nroLinhas in `cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
do
...
done


Alguma outra idéia?

Obrigada!


Verifica o que os colegas falaram.

Vou tentar resumir a explicação:

Quando tu executa um script, o shell atual executado os comando em um sub-shell. Finalizado o script, o sub-shell e a variáveis definidas nele também são finalizadas.

Para resolver isso, pode executar o comando da seguinte forma:
# source teu_script
ou
# . teu_script

Explicação:

Nas duas formas, o script será executado no shell atual, dessa forma, as variáveis permanecerão nele.



7. Re: Variável com saída de um comando

Caroline Kieling
Kieling

(usa CentOS)

Enviado em 22/06/2017 - 14:26h


Olá. Não deveria ser

nroLinhas=`cat /tmp/result-envia-tabela | grep 'rows' | cut -d " " -f1 | tail -1`
if [ "${nroLinhas}" = "0" ]; then
...
fi


?

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

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


Não... é no "/temp/" mesmo.
Nós criamos esse diretório para que ele pudesse ser um temporário mas com uma rotina deiferente de limpeza.

Acredito não ser erro de digitação pq quando executo o comando na linha de comando ele retorna corretamente o resultado .-.


8. Re: Variável com saída de um comando

Perfil removido
removido

(usa Nenhuma)

Enviado em 22/06/2017 - 14:27h

Certo. Era por desencargo.


9. Re: Variável com saída de um comando

Caroline Kieling
Kieling

(usa CentOS)

Enviado em 22/06/2017 - 14:31h


Bom dia, Kieling.
Segue sugestão:
NroLinhas=$(awk '/rows/{print $1}' /temp/result-envia-tabela |tail -1) 


Se posível, poste o /temp/result-envia-tabela

Att.:
Marcelo Oliver


Bom dia, Marcelo.

A variável volta nula, como antes .-.
Coloquei um echo para ver o resultado... Olha só:

nroLinhas=$(awk '/rows/{print $1}' /temp/result-envia-tabela |tail -1)
echo "Valor da minha variável: ${nroLinhas}!"

Saída:

Valor da minha variável: !


Meu /temp/result-envia-tabela

>>>>> read COMMANDS of SCRIPT FILE: envia-tabela.sql <<<<<

dmSQL> connect to cotripaldb0_desenv;
USE db #1 connected to db:<cotripaldb0_desenv> by user:<SYSADM>

dmSQL> insert or replace into af0000_dat select * from cotripaldb0:af0000_dat;
2 rows affected

dmSQL> quit;

>>>>> end of SCRIPT FILE: envia-tabela.sql <<<<<
USE db #1 disconnected from db:<cotripaldb0_desenv> by user:<SYSADM>



10. Re: Variável com saída de um comando

Caroline Kieling
Kieling

(usa CentOS)

Enviado em 22/06/2017 - 14:35h


Boa tarde, se tua saída gera numeros tentou fazer a pesquisa desta forma ?

nroLinhas=`cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
if [ "${nroLinhas}" -eq 0 ]; then
...
fi



Boa tarde!

Realmente, posso testar assim também. Mas nem consegui chegar lá pq não tenho valores para ${nroLinhas}

O meu echo retorna vazio como mostrei ali em cima


11. Re: Variável com saída de um comando

Marcos Felipe
plimo263

(usa Ubuntu)

Enviado em 22/06/2017 - 14:39h

Kieling escreveu:


Boa tarde, se tua saída gera numeros tentou fazer a pesquisa desta forma ?

nroLinhas=`cat /temp/result-envia-tabela|grep 'rows'|cut -d " " -f1|tail -1`
if [ "${nroLinhas}" -eq 0 ]; then
...
fi



Boa tarde!

Realmente, posso testar assim também. Mas nem consegui chegar lá pq não tenho valores para ${nroLinhas}

O meu echo retorna vazio como mostrei ali em cima



Ah sim, tentou colocar o caminho completo dos executaveis ?

nroLinhas=`/bin/cat /temp/result-envia-tabela| /bin/grep 'rows'| /usr/bin/cut -d " " -f1| /usr/bin/tail -1`


12. Re: Variável com saída de um comando

Caroline Kieling
Kieling

(usa CentOS)

Enviado em 22/06/2017 - 14:41h

dmap escreveu:
Verifica o que os colegas falaram.

Vou tentar resumir a explicação:

Quando tu executa um script, o shell atual executado os comando em um sub-shell. Finalizado o script, o sub-shell e a variáveis definidas nele também são finalizadas.

Para resolver isso, pode executar o comando da seguinte forma:
# source teu_script
ou
# . teu_script

Explicação:

Nas duas formas, o script será executado no shell atual, dessa forma, as variáveis permanecerão nele.


Executei o meu script com o "source" na frente e nada. A saída continua a mesma.





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts