redireciona a saída do tee e do grep para vários arquivos de log

3

Redirecionando a saída de um script STDOUT + STDERR para Logfile 1 e um grep para Logfile 2

./run_test.sh 2>&1 | tee -a /var/log/log1.log | (grep 'START|END') > /var/log/myscripts.log

Como posso fazer isso funcionar?

Eu tentei a sintaxe diferente, mas não funcionou.

A saída será redirecionada apenas para o primeiro log. O segundo log está vazio.

./run.sh 2>&1 | tee -a ~/log1.log | grep 'Start' > /var/log/myscripts.log
./run.sh 2>&1 | tee -a ~/log1.log | egrep 'Start' > /var/log/myscripts.log
./run.sh 2>&1 | tee -a ~/log1.log | grep -E 'Start' > /var/log/myscripts.log

log1.log contém a saída. myscripts.log está vazio.

    
por Memphis01 26.09.2014 / 13:27

2 respostas

2

Você não precisa (ou quer) os parênteses lá. Além disso, a sintaxe grep para OR lógica é grep 'foo\|bar . Você precisa escapar do | , a menos que você use -E . Então, qualquer um desses funcionará:

./run_test.sh 2>&1 | tee -a log1.log | grep 'START\|END' > myscripts.log

ou

./run_test.sh 2>&1 | tee -a log1.log | grep -E 'START|END' > myscripts.log

ou

./run_test.sh 2>&1 | tee -a log1.log | grep -P 'START|END' > myscripts.log
    
por 26.09.2014 / 13:37
2

A maneira como você tentou está mais ou menos correta.

  • O padrão grep não funciona dessa maneira. As seguintes formas funcionariam:

    egrep 'START|END'
    grep -E 'START|END'
    grep 'START\|END'
    
  • Parênteses
  • em torno da chamada grep não são necessários. Eles começariam um subshell.

Comando final:

./run_test.sh 2>&1 | tee -a /var/log/log1.log | grep 'START\|END' > /var/log/myscripts.log
    
por 26.09.2014 / 13:38