Как добавить фильтр к выходу `tail -f`, который бы выдавал звуковой сигнал тревоги при наличии соответствующего входа?

Мне нужно проанализировать журнал для конкретного вывода, и, если определенное ключевое слово соответствует в выводе, мне нужно выдать echo -e "\a",

Как бы я отфильтровать сценарий, чтобы это произошло? Я также пропускаю его через ack[-grep], поэтому, возможно, я хотел бы поместить уведомление о тревоге до раскрашивания.

2 ответа

Решение
tail -f file | while read line; do
  echo $line | grep -qF keyword && echo -e \\a >&2; echo $line; done

Это порождает больше процессов, чем sed, но помещает управляющий символ на терминал через stderr, так что он с меньшей вероятностью будет изменен последующими процессами. Кроме того, реализация sed может полностью буферизовать свои входные данные и не генерировать никаких выходных данных до тех пор, пока tail не сгенерирует 8K или около того выходных данных, так что вы можете получить предупреждение через несколько часов или дней после получения данных.

Я бы использовал sed для замены ключевого слова на ключевое слово \a. Это должно работать до тех пор, пока ваши последующие шаги не повредят \a.

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