Exibir saída de comando na tela e armazenar erro em variável [RESOLVIDO]

1. Exibir saída de comando na tela e armazenar erro em variável [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 17/08/2017 - 12:16h

como faço para exibir a saída de um comando na tela (terminal) e, ao mesmo tempo, armazenar os erros desse comando em uma variável?

não necessariamente precisa ser apenas os erros a serem armazenados em uma variável; pode ser armazenado nessa variável tudo o que é exibido na tela.

um script ilustrativo que reproduz meu problema:
f="nomearquivo.zip"

k=$(eval unzip $f)

echo "variável: $k"
nesse código acima são exibidas mensagens na tela, porém, nenhuma dessas mensagens são armazenadas na variável.

quando "nomearquivo.zip" é um arquivo ".zip" protegido por senha, assim, é exibido uma mensagem de erro na tela que gostaria que fosse armazenada em uma variável.

consigo resultados diferentes alterando a linha "k=$(eval unzip $f)", mas, até agora, nenhum resolve meu problema.

por exemplo:
k=$(eval unzip $f)   # não mostra tudo na tela, e não armazena os erros (armazena uma das mensagem que deveria ser exibida na tela);

k=$(eval unzip $f 1>&2) # mostra tudo corretamente na tela (inclusive os erros), mas não armazena os erros (armazena nada);

k=$(eval unzip $f 2>&1 ) # armazena os erros corretamente, mas não mostra nada na tela.


ou seja, como fazer para que as mensagens exibidas na tela (ou, no mínimo, as mensagens de erro) sejam também armazenadas, ao mesmo tempo, na variável?



  


2. MELHOR RESPOSTA

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 17/08/2017 - 16:41h

Tente assim:

var=$(comando |& tee /dev/tty)

3. Re: Exibir saída de comando na tela e armazenar erro em variável [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 17/08/2017 - 12:48h

raserafim escreveu:

como faço para exibir a saída de um comando na tela (terminal) e, ao mesmo tempo, armazenar os erros desse comando em uma variável?

não necessariamente precisa ser apenas os erros a serem armazenados em uma variável; pode ser armazenado nessa variável tudo o que é exibido na tela.

um script ilustrativo que reproduz meu problema:
f="nomearquivo.zip"

k=$(eval unzip $f)

echo "variável: $k"
nesse código acima são exibidas mensagens na tela, porém, nenhuma dessas mensagens são armazenadas na variável.

quando "nomearquivo.zip" é um arquivo ".zip" protegido por senha, assim, é exibido uma mensagem de erro na tela que gostaria que fosse armazenada em uma variável.

consigo resultados diferentes alterando a linha "k=$(eval unzip $f)", mas, até agora, nenhum resolve meu problema.

por exemplo:
k=$(eval unzip $f)   # não mostra tudo na tela, e não armazena os erros (armazena uma das mensagem que deveria ser exibida na tela);

k=$(eval unzip $f 1>&2) # mostra tudo corretamente na tela (inclusive os erros), mas não armazena os erros (armazena nada);

k=$(eval unzip $f 2>&1 ) # armazena os erros corretamente, mas não mostra nada na tela.


ou seja, como fazer para que as mensagens exibidas na tela (ou, no mínimo, as mensagens de erro) sejam também armazenadas, ao mesmo tempo, na variável?


unir os dois não resolve ???
k=$(eval unzip $f 1>&2 ; eval unzip $f 2>&1) 



------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



4. Re: Exibir saída de comando na tela e armazenar erro em variável [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 17/08/2017 - 12:53h

Mauriciodez escreveu:

unir os dois não resolve ???
k=$(eval unzip $f 1>&2 ; eval unzip $f 2>&1) 


não resolve...

entre outras coisas, porque o arquivo seria descompactado duas vezes..



5. Re: Exibir saída de comando na tela e armazenar erro em variável

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 17/08/2017 - 13:10h

Experimenta usar o "tee":

$ unzip Documentos.zip | tee log.txt
Archive: Documentos.zip
inflating: compiz.profile
inflating: ext-files

Ele salva a saída do comando em "log.txt" e exibe o conteúdo na tela.


6. Re: Exibir saída de comando na tela e armazenar erro em variável [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 17/08/2017 - 14:19h

HCK escreveu:

Experimenta usar o "tee":

$ unzip Documentos.zip | tee log.txt
Archive: Documentos.zip
inflating: compiz.profile
inflating: ext-files

Ele salva a saída do comando em "log.txt" e exibe o conteúdo na tela.

pois é HCK...

mais cedo quando descobri o "tee" achava que resolveria... mas não resolveu..

#k=$(eval unzip $f | tee teste1.txt) # não exibe tudo na tela, não armazena os erros (armazena outras mensagens);
#k=$(eval unzip $f 1>&2 | tee teste1.txt) # exibe tudo na tela corretamente, mas não armazena nada;
#k=$(eval unzip $f 2>&1 | tee teste1.txt) # não exibe tudo na tela, mas armazena corretamente os erros;



7. Re: Exibir saída de comando na tela e armazenar erro em variável [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 17/08/2017 - 16:04h

ainda não estou entendendo o que vc quer de saída mais tenta aí
unzip $f 1>&2 >> log.txt 





------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



8. Re: Exibir saída de comando na tela e armazenar erro em variável [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/08/2017 - 16:57h

Boa tarde.
Para gerar um log, use o comando "script",
Todas as saídas serão gravadas no arquivo definido/padrão.

Att.:
marcelo oliver


9. Re: Exibir saída de comando na tela e armazenar erro em variável

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 19/08/2017 - 11:44h

Mauriciodez escreveu:

ainda não estou entendendo o que vc quer de saída mais tenta aí
unzip $f 1>&2 >> log.txt 

não funciona...

nem exibe tudo na tela (falta algumas mensagens), e nem armazena correta no arquivo (faltam as mensagens de erro)...

se o que mostrar no terminal for salvo exatamente igual em uma variável (ou mesmo em um arquivo) resolveria meu problema.




10. Re: Exibir saída de comando na tela e armazenar erro em variável [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 19/08/2017 - 11:52h

msoliver escreveu:

Boa tarde.
Para gerar um log, use o comando "script",
Todas as saídas serão gravadas no arquivo definido/padrão.


msoliver, o colega SMarcell resolveu meu problema!

mas, me pareceu interessante o comando "script".

deverá me ser útil em outra situação.

obrigado!




11. Re: Exibir saída de comando na tela e armazenar erro em variável

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 19/08/2017 - 11:54h

SMarcell escreveu:

Tente assim:

var=$(comando |& tee /dev/tty)


resolvido!!

obrigado SMarcell, solucionou meu problema!

com esse código tudo o que é mostrado na tela é armazenado também na variável...! ok!!

obrigado também aos demais colegas.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts