Redirecionar stdout e stderr, com registros de data e hora em stderr apenas

5

Estou tentando criar um registro melhor para um programa de teste que não escrevi. Eu quero que todas as linhas da saída STDERR tenham timestamps, mas, se possível, eu quero deixar STDOUT sozinho. Eu também quero um arquivo (all.txt) para log tanto stdout e stderr (com ou sem carimbo de hora STDERR), e um arquivo dedicado à saída STDERR (errors.txt, com timestamps)

Além disso, eu não ligo se algo está ecoado no terminal ou não . Este é um programa em estilo de lote.

Eu olhei para o rsyslog e isso pode vir depois, mas esta é uma solução que eu deveria ser capaz de hackear rapidinho ... pelo menos, se eu soubesse mais sobre o redirecionamento de saída. Eu li um monte de perguntas semelhantes, mas aparentemente nada com esta situação exata.

Acho que, para adicionar registros de data e hora à saída do stderr, quero usar um canal e a técnica a partir dessa pergunta: link

Qual é a solução mais limpa aqui? Note que eu tenho sistemas RHEL5 que estão no bash 3.2.25.

            +----stdout-------------------+
           /                               \
test.pl --+                                 +--> all.txt
           \                               /
            +----stderr | add_timestamps -+----> errors.txt
    
por twblamer 20.08.2012 / 19:39

1 resposta

5

Acho que isso vai fazer o que você quer:

test.pl 2>&1 >all.txt | add_timestamps | tee -a all.txt > errors.txt

  • Redirecionar stderr para stdout (para que possamos canalizá-lo mais tarde)
  • Redirecionar (o original) stdout para all.txt
  • Pipe stdout (que agora contém as mensagens de erro) para add_timestamps
  • Use tee para anexar erros (com registros de data e hora) a all.txt
  • Finalmente, também escreva os erros em errors.txt
por 20.08.2012 / 19:57

Tags