谁能解释这个简单的bash脚本出了什么问题?

时间:2019-02-19 16:57:12

标签: bash

下面有一个简单的bash脚本,我基本上想运行X秒钟,然后重新启动。老实说,我遇到的问题是,我在脚本中定义$ SECONDS,而从未重新定义或操纵该值。但是,如果使用-x照原样运行脚本,则可以看到$ SECONDS与$ loopcounter一起递增。 WTH?!?

#!/bin/bash -x

SECONDS=30
loopcounter=0
LOGFILE="/var/log/somelogfile"

while [ /bin/true ]
do
    eval "tail -f $LOGFILE | grep -i error &"
    while [ $loopcounter -lt $SECONDS ]
    do
        loopcounter=$(($loopcounter + 1))
        sleep 1
    done
    echo "Restarting.."
    pkill -f "tail -f $LOGFILE"
done

1 个答案:

答案 0 :(得分:6)

SECONDS是一个特殊变量。参见man bash

  

每次引用此参数时,自shell以来的秒数                 返回调用。如果将值分配给SECONDS,则该值                 后续引用返回的是自                 分配加上分配的值。如果未设置SECONDS,则即使随后将其重置,它也会失去其特殊属性。

如果您不想与特殊的变量冲突,请不要使用大写的变量名。