当输出特定字符串时,执行另一个命令

当输出特定字符串时,执行另一个命令

我目前正在尝试编写一个脚本来监视我的 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

相关内容