如何等待将变量的值设置为true直到一定的时间间隔

时间:2018-10-16 16:46:20

标签: linux bash shell sh

场景:
我有一个在嵌入式Linux上运行的Shell脚本。该脚本启动需要打开变量状态的应用程序。

代码:
所以我这样做

#!/bin/sh

start_my_app=false

wait_for_something=true
while $wait_for_something; do

    wait_for_something=$(cat /some/path/file)

    if [ "$wait_for_something" = "false" ]
    then
        echo Waiting...
    elif [ "$wait_for_something" = "true" ]
    then
        echo The wait has ended
        wait_for_something=false
        start_my_app=true
    else

    fi

done

if [ "$start_my_app" = "true" ]
then
    /usr/bin/MyApp
fi

#End of the script

/some/path/file的值为false,并在不同组件中的另一个脚本在几秒钟内变为true。然后随着逻辑的发展,我的脚本中的wait_for_something变成true/usr/bin/MyApp开始了。

问题以及随之而来的问题
但我想做得更好。
我不想在一段时间的循环中无限期地等待,期望一段时间后/some/path/file中的内容值设置为true

我要等待/some/path/file中的内容值设置为true仅5秒钟。如果/some/path/file在5秒钟内不包含true,我想将start_my_app设置为false。

如何在Linux上的Shell脚本中实现此功能?

PS:
我的整个脚本由另一个脚本在后台运行

1 个答案:

答案 0 :(得分:1)

使用SECONDS变量作为计时器。

SECONDS=0
while (( SECONDS < 5 )) && IFS= read -r value < /some/path/file; do
  if [[ $value = true ]]; then
    exec /usr/bin/MyApp
  fi
done

如果您从未从文件中读取true,则脚本将在5秒钟后退出。否则,脚本将用MyApp替换当前的shell,从而有效退出while循环。