Когда конкретная строка в выводе, сделайте другую команду

В настоящее время я пытаюсь написать скрипт, который контролирует мой bashrc. Я использую inotifywait -m /root/.bashrc. Я хотел использовать это как стартовый скрипт, поэтому каждый раз, когда моя машина загружается, inotifywait выполняется и ждет, пока не произойдут изменения в моем bashrc.

В моем случае:

Вывод inotifywait -m /root/.bashrc при изменении вещи в bashrc:

Setting up watches.
Watches established.
/root/.bashrc OPEN
/root/.bashrc CLOSE_NOWRITE,CLOSE
/root/.bashrc MOVE_SELF
/root/.bashrc ATTRIB
/root/.bashrc DELETE_SELF

Есть ли возможность (условие if, функция, или что-то еще) что, когда на выходе появляется строка «ATTRIB», выполняется другая команда? В этом случае отправка электронного письма.

Я открыт для любых (лучших) идей.

Спасибо заранее.

0
задан 11 September 2019 в 17:46

1 ответ

Я нашел решение при поиске Интернета: https://stackoverflow.com/questions/26371665/bash-script-to-read-a-file-and-run-a-command-based-on-a-specific-string

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

#!/bin/bash

DIR_TO_WATCH=/root
STRING=ATTRIB
WATCHED_FILE=".bashrc"
BRC=/root/.bashrc
ORIG_PATH=<origin-path>
DEST_PATH=<dest-path>

cd "$DIR_TO_WATCH" || exit

inotifywait -qme attrib --format '%f' ./ | while read -r WATCHED_FILE; do
    if grep "$STRING" "$WATCHED_FILE" &>/dev/null; then
        if cp "$ORIG_PATH".bashrc "$DEST_PATH"; then
            sleep 1
            rsync "$BRC" "$ORIG_PATH"
            echo "Bashrc was changed."

        else
            echo "There was an error while copying the old bashrc."
        fi
  fi
done
0
ответ дан 23 October 2019 в 02:35

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

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