Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash:文件更改时执行操作(grep)_Bash_File_Monitor - Fatal编程技术网

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

bash:文件更改时执行操作(grep),bash,file,monitor,Bash,File,Monitor,谷歌搜索了很多,但令人怀疑的是,没有找到有效的解决方案。我是工程师,不是程序员。只需要这个工具 所以:我有一个文件“test2.dat”,每当它发生变化时,我都要对它进行grep处理 我没有inotifywait,或者什么时候更改或者安装了任何类似的东西,我没有这样做的权利(甚至不想这样做,因为我希望这个脚本能够普遍工作) 有什么建议吗 What I tried: LTIME='stat -c %Z test2.dat' while true do ATIME='stat -c

谷歌搜索了很多,但令人怀疑的是,没有找到有效的解决方案。我是工程师,不是程序员。只需要这个工具

所以:我有一个文件“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

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

您的命令替换语法是错误的。如果您希望命令在引号内运行,那么您就错了。bash中的语法是执行
$(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
中使用小写字母作为变量定义,只需在上面的示例中重复使用模板。

如果删除
-I
,会发生什么?谢谢。实际上什么也没发生。甚至在移除-i之前。脚本没有做任何事情,我上面提到的这个最初的成功一定是偶然的。@Jewenile:为什么命令用单引号括起来?您是否希望运行命令并将输出存储在变量中。
bash
中的命令替换语法是执行
$(cmd)
,因此
LTIME=$(stat-c%Z test2.dat)
应该是正确的语句。我认为这就是为什么它只执行一次grep,输入
if子句的原因,因为它是true,但是在if中有
LTIME=$ATIME
,这就是为什么它没有再次输入if子句,因为它们变得相等。要检查是否是这种情况,请在
fi
Inian:之后执行
echo
,因为我在某处发现了这种情况。我不太懂bash语法,因为我正在学习。不是程序员。将尝试实现您的提示。编辑:谢谢,它很管用!:)