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

时间:2017-07-10 07:23:09

标签: bash file monitor

谷歌搜索了很多,并且毫不奇怪,找到了一个有效的解决方案。我是工程师,而不是程序员。只需要这个工具。

所以:我有一个文件" test2.dat"每当它发生变化时我都想要grep。

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

有什么建议吗?

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

但基本上什么也没做。

1 个答案:

答案 0 :(得分:1)

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

同样通过[[ "$ATIME" != "$LTIME" ]]进行文字字符串比较,永远不会工作。存储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中使用小写字母作为变量定义,只需在上面的示例中重复使用您的模板。