inotifywait Применить рисунок регулятора Regex на изменениях в файле

Требование: предупреждение, если есть какой-либо пакет, установленный или удаленный на сервере Ubuntu.

Для этого требования я пытаюсь использовать InotifyWait, чтобы постоянно контролировать dpkg.log, если есть какие-либо изменения, использующие рисунок Regex для установки и удаления пакета и предупреждения на основе этого.

Как я могу принять модифицированный контент файла, который контролируется inotifywait в другой файл или хранить его в переменной, чтобы я мог применить некоторое регулярное выражение и предупреждение на основе этого?

Пожалуйста, помогите мне, как можно Я делаю это или есть в том, что я могу добиться этого требования, используя любой другой инструмент.

Это то, что я пытался, но это не работает.

  #!/bin/sh
   while inotifywait -e modify /var/log/dpkg.log; do   
      if tail -n1 /var/log/dpkg.log | grep installed; then
         // alert script    
       fi 
    done
2
задан 19 January 2021 в 12:24

1 ответ

Этот скрипт с использованием Diff работает :

#!/bin/bash

# Save contents of dpkg.log
last_content=$(</var/log/dpkg.log)

# Loop inotifywait
while inotifywait -e modify /var/log/dpkg.log; do
    # Check diff between dpkg.log and last saved content.
    # Use grep to filter lines not interesting
    # save in a variabler called "diff".
    diff=$(diff /var/log/dpkg.log <(printf '%s' "$last_content") | grep '^<' | grep "status installed")

    # Check if the command to check "diff" succeeded ($? == 0)
    # if yes, run the alert:
    if [ $? -eq 0 ]; then
        echo "$diff"
        notify-send "$(printf '%s' "$diff" | grep -Po "status installed \K.*") has been installed"
    fi

    # Save contents of dpkg.log
    last_content=$(</var/log/dpkg.log)
done

вместо Notify-Edit , вы, конечно, можете использовать любой другой метод для предупреждения.

1
ответ дан 18 March 2021 в 23:42

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

Похожие вопросы: