перенаправить вывод tee и grep для нескольких лог-файлов

Перенаправление вывода из сценария STDOUT + STDERR в Logfile 1 и grep в Logfile 2

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

Как я могу сделать эту работу?

Я пробовал использовать другой синтаксис, но он не работает.

Выход будет перенаправлен только на первый журнал. Второй журнал пуст.

 ./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 содержит вывод. myscripts.log пуст.

Вам не нужны (или не нужны) круглые скобки. Кроме того, синтаксис grep для логического ИЛИ является grep 'foo\|bar . Вам нужно избегать | если вы не используете -E . Итак, любой из них будет работать:

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

или

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

или

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

То, как вы пытались, более или менее корректно.

  • Шаблон grep не работает таким образом. Будут работать следующие способы:

     egrep 'START|END' grep -E 'START|END' grep 'START\|END' 
  • скобки вокруг вызова grep не нужны. Они запустили подоболочку.

Конечная команда:

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