Enviar saída para o log e para o terminal ao mesmo tempo!

1. Enviar saída para o log e para o terminal ao mesmo tempo!

Mauri do Carmo
p3k4d0r

(usa Debian)

Enviado em 16/08/2013 - 21:37h

Boa noite galera...

Estou desenvolvendo um script de backup (para fins de estudo) e to com uma dúvida...
Gostaria de saber como mostrar uma mensagem no terminal, e ao mesmo tempo salvá-la num arquivo de log.
No momento estou fazendo do jeito que está aí em baixo, porém, to achando que está "poluindo" o código.

for arq in $ORIGEM
do
if [ -e $arq ]
then
echo "$CONT.'$arq' pronto para o Backup!"
echo "$CONT.'$arq' pronto para o Backup!" >> $LOG
let CONT++
else
echo "$CONT.Arquivo ou pasta de origem não existe ($arq)!"
echo "$CONT.Arquivo ou pasta de origem não existe ($arq)!" >> $LOG
echo
echo >> $LOG
echo $FALHA
echo $FALHA >> $LOG
echo >> $LOG
exit
fi
done

Esse é apenas um laço presente no script. Como podem ver, eu uso o 'echo' duas vezes consecutivas. Uma pra mostrar na tela e a segunda para gravar a mesma mensagem num arquivo de log.

Eu queria saber se existe uma forma de mostrar no terminal e gravar no log com apenas 'um echo' comando...

Espero que tenham entendido, abraços!! Agradeço desde já!


  


2. Re: Enviar saída para o log e para o terminal ao mesmo tempo!

Marcelo Theodoro
MarceloTheodoro

(usa Debian)

Enviado em 16/08/2013 - 21:55h

Procure pelo comando tee.


3. Re: Enviar saída para o log e para o terminal ao mesmo tempo!

Marcelo Theodoro
MarceloTheodoro

(usa Debian)

Enviado em 16/08/2013 - 21:56h

MarceloTheodoro escreveu:

Procure pelo comando tee.


Só que acho que ele sempre sobrescreve o arquivo. Tem que verificar isso também.


4. Re: Enviar saída para o log e para o terminal ao mesmo tempo!

William Amaral de Souza
Williamm

(usa Linux Mint)

Enviado em 16/08/2013 - 22:39h

acho que sairia algo assim...


echo "$CONT.'$arq' pronto para o Backup!" | tee -a $LOG



5. Re: Enviar saída para o log e para o terminal ao mesmo tempo!

Carlos Adean
c4rl

(usa CentOS)

Enviado em 16/08/2013 - 23:19h

Olá

Como disseram os colegas o comando tee resolve o teu problema.

Talvez não se aplique ao caso mas gostaria de sugerir o comando logger, obviamente para geração dos logs, e o parâmetro -x no interpretador. Este permite que você assista a execução do script passo a passo.


$ sudo logger "Testing logger command"
$ sudo tail -2 /var/log/messages
Aug 16 23:15:01 zyon CRON[8154]: (foreman) CMD ( cd ${FOREMAN_HOME} && /usr/bin/rake db:sessions:clear >/var/log/foreman/cron.log 2>&1)
Aug 16 23:15:35 zyon c4rl: Logging for tests


Para uso do -x basta adicioná-lo no início do script ou chamar 'bash -x seu_script.sh'


#!/bin/bash
set -x



6. Re: Enviar saída para o log e para o terminal ao mesmo tempo!

Mauri do Carmo
p3k4d0r

(usa Debian)

Enviado em 16/08/2013 - 23:20h

Valeu Marcelo e Think pelas dicas, é exatamente o que eu precisava, quando terminar o script vou postar aqui pra galera testar e opinar.

Abraço, valeu msm!


7. Re: Enviar saída para o log e para o terminal ao mesmo tempo!

Mauri do Carmo
p3k4d0r

(usa Debian)

Enviado em 16/08/2013 - 23:22h

Valeu c4rl

Vou dar uma conferida nesse comando também, pode ser que me seja útil em alguma situação :D


8. Duvida

Bruno
bruno santinato

(usa Fedora)

Enviado em 16/07/2014 - 10:45h

Pessoal,

Aproveitando este topico para retirar a minha duvida, metade dela se sanou com as respostas obtidas neste tópico, mas ainda estou com dúvidas.

Estou criando um Shell Script, no qual irá limpar meu filesystem e gostaria que gerasse dois arquivos de logs, sendo eles :

1 - Arquivo de log de sucesso do script (sucesso de remoção e sucesso de execução)
2 - arquivo de log de erros do script (erro de execução e nao remoção dos arquivos)

Alguem pode me ajudar?