有人能解释一下这个简单的bash脚本出了什么问题吗?

有人能解释一下这个简单的bash脚本出了什么问题吗?,bash,Bash,下面我有一个简单的bash脚本,我基本上希望运行X秒,然后重新启动自己。老实说,我有点困惑的问题是,我在脚本中定义$SECONDS,而从不重新定义或操纵该值。然而,如果使用-x按原样运行脚本,您可以看到$SECONDS随着$loopcounter一起递增。什么 #!/bin/bash -x SECONDS=30 loopcounter=0 LOGFILE="/var/log/somelogfile" while [ /bin/true ] do eval "tail -f $LOGF

下面我有一个简单的bash脚本,我基本上希望运行X秒,然后重新启动自己。老实说,我有点困惑的问题是,我在脚本中定义$SECONDS,而从不重新定义或操纵该值。然而,如果使用-x按原样运行脚本,您可以看到$SECONDS随着$loopcounter一起递增。什么

#!/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
秒是一个特殊变量。参见man bash:

每次引用此参数时,自shell之后的秒数 调用被返回。如果将某个值指定给秒,则该值 在后续引用时返回的是自 赋值加上赋值。如果未设置秒数,它将丢失其特殊属性,即使随后将其重置

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

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

每次引用此参数时,自shell之后的秒数 调用被返回。如果将某个值指定给秒,则该值 在后续引用时返回的是自 赋值加上赋值。如果未设置秒数,它将丢失其特殊属性,即使随后将其重置


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

[/bin/true]正在检查/bin/true是否为非空字符串。它碰巧会成功,但不是因为你所希望的原因。while-true或while:是无止境循环的常用习惯用法。[[…]通常优于[…]。c、 f.常规bash条件结构分解。[/bin/true]正在检查/bin/true是否为非空字符串。它碰巧会成功,但不是因为你所希望的原因。while-true或while:是无止境循环的常用习惯用法。[[…]通常优于[…]。c、 一个通用的bash条件结构分解。谢谢,我不知道这个特性。很多特殊的全大写。。。vars。谢谢,我不知道这个功能。很多特殊的全大写。。。瓦尔斯。