首页 > 解决方案 > 谁能解释这个简单的 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 $LOGFILE | grep -i error &"
    while [ $loopcounter -lt $SECONDS ]
    do
        loopcounter=$(($loopcounter + 1))
        sleep 1
    done
    echo "Restarting.."
    pkill -f "tail -f $LOGFILE"
done

标签: bash

解决方案


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

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

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


推荐阅读