bash: 文件更改时执行操作 (grep)

bash: perform action (grep) when file changed

在谷歌上搜索了很多,令人惊讶的是,没有找到可行的解决方案。我是工程师,不是程序员。正好需要这个工具。

所以:我有一个文件 "test2.dat",每次更改时我都想 grep。

我没有安装 inotifywait 或 when-changed 或任何类似的东西,我也没有这样做的权利(甚至不想这样做,因为我希望这个脚本可以普遍工作)。

有什么建议吗?

What I tried:
LTIME='stat -c %Z test2.dat'

while true    
do
   ATIME='stat -c %Z test2.dat'

   if [[ "$ATIME" != "$LTIME" ]]
   then    
       grep -i "15 RT" test2.dat > test_grep2.txt
       LTIME=$ATIME
   fi
   sleep 5
done

但这基本上没有任何作用。

您的命令替换语法错误。如果您期望在引号内使用 运行 命令,那您就错了。 bash 中的 command-substitution 语法是 $(cmd)

此外,通过执行 [[ "$ATIME" != "$LTIME" ]],您正在执行文字 string 比较,这将 never 起作用。一旦存储 LTIME=$ATIME,随后的字符串比较将永远不会正确。

您脚本的适当语法应该是,

#!/bin/bash

LTIME=$(stat -c %Z test2.dat)

while true    
do
   ATIME=$(stat -c %Z test2.dat)    
   if [[ "$ATIME" != "$LTIME" ]]
   then    
       grep -i "15 RT" test2.dat > test_grep2.txt
       LTIME="$ATIME"
   fi
   sleep 5
done

我建议在 bash 中对变量定义使用小写字母,只是在上面的示例中重新使用了您的模板。