bash:文件更改时执行操作(grep)
谷歌搜索了很多,但令人怀疑的是,没有找到有效的解决方案。我是工程师,不是程序员。只需要这个工具 所以:我有一个文件“test2.dat”,每当它发生变化时,我都要对它进行grep处理 我没有inotifywait,或者什么时候更改或者安装了任何类似的东西,我没有这样做的权利(甚至不想这样做,因为我希望这个脚本能够普遍工作) 有什么建议吗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
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语法,因为我正在学习。不是程序员。将尝试实现您的提示。编辑:谢谢,它很管用!:)