Palavras-chave: Shell, agrupar, redirecionamento
Ao fazer log da execução de um programa ou compor um arquivo de texto que agrupe a saída de vários comandos, é comum ver a seguinte estrutura ser utilizada:
comando-1 >> arquivo comando-2 >> arquivo comando-3 >> arquivo
Tudo bem, isso funciona. Mas há uma maneira mais prática e eficiente de se fazer o mesmo, que é agrupar todos os comandos e redirecioná-los para o arquivo de log uma única vez:
(comando-1 ; comando-2 ; comando-3) >> arquivo
Basta colocar todos os comandos dentro de um par de parênteses para que o shell os encare como um grupo único.
Veja um exemplo da aplicação dessa técnica e perceba uma outra vantagem: o script fica mais legível.
Log Ineficiente
echo "Iniciando em $(date)" >> /tmp/log.txt rm -vr /tmp/becape/* >> /tmp/log.txt ~/bin/meu-becape.sh --tudo >> /tmp/log.txt echo "Tamanho do becape: $(du -hs /tmp/becape)" >> /tmp/log.txt echo "Terminado em $(date)" >> /tmp/log.txt
Log Eficiente
( echo "Iniciando em $(date)" rm -vr /tmp/becape/* ~/bin/meu-becape.sh --tudo echo "Tamanho do becape: $(du -hs /tmp/becape)" echo "Terminado em $(date)" ) >> /tmp/log.txt
eita q esse me valeu a pena Aurélio, boa.
Olá pessoal!
Uma outra forma muito interessante é utilizar o comando exec:
LOG=”/tmp/log.txt”
exec 1>>$LOG
exec 2>&1
echo “Iniciando em $(date)”
rm -vr /tmp/becape/*
~/bin/meu-becape.sh –tudo
echo “Tamanho do becape: $(du -hs /tmp/becape)”
echo “Terminado em $(date)”
Pronto, assim teremos toda a execução, stdout (exec 1>>$LOG) e stderr (exec 2>&1), no arquivo de log.
Abs a todos.