场景:
我有一个在嵌入式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:
我的整个脚本由另一个脚本在后台运行
答案 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
循环。