我正在尝试检查是否在循环中使用'stat'命令更新了文件(在本例中为/ var / log / messages)。但是代码永远不会退出循环并因某种原因继续运行。
#!/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是否已更改?
答案 0 :(得分:1)
美元符号必须在报价范围内。 $"..."
是一种用于翻译的特殊引用机制,因此,除非您使用NOW
和THEN
转换为相同字符串的语言环境,否则该条件永远不会成立。
if [ "$NOW" == "$THEN" ]; then
答案 1 :(得分:0)
首先,下面的版本至少执行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
~
请注意统计数据正在执行。