Bash 检查文件是否已更新

Bash 检查文件是否已更新,bash,Bash,我试图检查一个文件(在本例中为/var/log/messages)是否已在循环中使用“stat”命令进行了更新。然而,由于某种原因,代码从未退出循环并继续运行 #!/bin/bash check='/var/log/messages' THEN="stat -c %z ${check}" NOW="stat -c %z ${check}" while [ $"NOW" == $"THEN" ] do echo "$NOW" if [ $"NOW" != $"THEN" ]; t

我试图检查一个文件(在本例中为/var/log/messages)是否已在循环中使用“stat”命令进行了更新。然而,由于某种原因,代码从未退出循环并继续运行

#!/bin/bash 
check='/var/log/messages'

THEN="stat -c %z ${check}"
NOW="stat -c %z ${check}"

while [ $"NOW" == $"THEN" ]
do 

    echo "$NOW"
if [ $"NOW" != $"THEN" ]; then 
    echo "${check} has been updated."

if 

done

对此有何想法?有没有更简单的方法来查看/var/log/messages是否已更改?

美元符号需要在引号内
$“…”
是一种用于进行翻译的特殊引用机制,因此,除非您使用的区域设置是
现在
然后
翻译为同一字符串,否则该条件永远不会为真

if [ "$NOW" == "$THEN" ]; then

首先,下面的版本至少执行stat命令以及上面解释的所有更改。您必须考虑的一件事是,除非消息更新的时间少于执行所需的时间,否则当时和现在几乎总是一样的

#!/bin/bash
check='/var/log/messages'

THEN=`stat -c %z ${check}`
NOW=`stat -c %z ${check}`

if [ "$NOW" == "$THEN" ]; then

    echo "$NOW"
elif [ "$NOW" != "$THEN" ]; then
    echo "$check has been updated."
fi
~   

请注意正在执行stat。

查看一下,您还需要更新
while
循环中
值(至少)。正确的?祝你好运。另外,你应该使用
sleep
在循环中设置一个小延迟。