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
中对变量定义使用小写字母,只是在上面的示例中重新使用了您的模板。
在谷歌上搜索了很多,令人惊讶的是,没有找到可行的解决方案。我是工程师,不是程序员。正好需要这个工具。
所以:我有一个文件 "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
中对变量定义使用小写字母,只是在上面的示例中重新使用了您的模板。