В настоящее время я пытаюсь написать скрипт, который контролирует мой 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», выполняется другая команда? В этом случае отправка электронного письма.
Я открыт для любых (лучших) идей.
Спасибо заранее.
Я нашел решение при поиске Интернета: 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