我目前正在尝试编写一个脚本来监视我的 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
当输出中出现字符串“ATTRIB”时,是否有可能(if 子句、函数或其他内容)执行另一个命令?在本例中,发送一封电子邮件。
我愿意接受任何(更好的)想法。
提前致谢。
答案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