Экран заставляет "tail -F | grep" отображать несогласованные строки

Это Ubuntu (3.13.0-29-generiC#53), пытающийся создать простой скрипт bash для отслеживания файла журнала на соответствие строк.

Если я сделаю следующее, в оболочке bash не будет ничего, кроме совпадений, что ожидается:

tail -F server.log | grep - line-buffered "word" | tee -a wordwatch.log

Но если я попытаюсь сделать то же самое на экране, сеанс будет спам с несопоставленными данными из просматриваемого файла журнала. Видимо, он показывает все из просматриваемого файла журнала. Этот спам не отображается в выходном файле журнала.

экран -S "WordWatch" хвост -F server.log | grep - line-buffered "word" | tee -a wordwatch.log

Что я делаю не так и как я могу предотвратить просмотр спама в журнале спама на экране?

1 ответ

Решение

Когда вы запускаете трубу таким образом:

screen -S "wordwatch" tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log

только тогда tail -F server.log запускается в течение screen а все остальное связано с screen, не tail,

Поэтому вы должны вызвать ваш bash-скрипт, который уже работает:

screen -S "wordwatch" myworkingscript.sh

Другой подход заключается в явном запуске оболочки и передаче ей всей строки:

screen -S "wordwatch" bash -c 'tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log'

Также другой хороший способ просмотра логов с экрана - это специальный конфиг:

#### logger.screenrc
sessionname     logger
hardstatus alwaysignore
split
split
screen  -t "Log One"  1 sh -c 'tail -F /a/b/c | egrep "xxxx" | tee -a '
focus
screen  -t "Log Two"  2 /home/somescript.sh
focus
screen  -t "Messages" 3 /home/otherscript.sh
focus
####

screen должен быть вызван так:

# screen -c /home/logger.screenrc

Для выхода просто нажмите <CTRL-A><CTRL-\> и подтвердите.

Другие вопросы по тегам