Как ждать, пока значение переменной будет установлено в истину, до определенного интервала времени - PullRequest
0 голосов
/ 16 октября 2018

Сценарий:
У меня есть скрипт оболочки, работающий на встроенном Linux.Скрипт запускает приложение, для которого необходимо состояние переменной.

Код:
Так что я делаю это так

#!/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 запускается.

Проблема и, следовательно, вопрос:
Но я хочу сделатьэто лучше.
Я не хочу бесконечно ждать в цикле while, ожидая, что значение контента в /some/path/file будет установлено true через некоторое время.

Я хочу подождать, пока значение содержимого в /some/path/file будет установлено true, всего на 5 секунд.Если /some/path/file не содержит true в течение 5 секунд, я хочу получить значение start_my_app, равное false.

Как мне добиться этой функциональности в сценарии оболочки на linux?

PS:
Весь мой сценарий выполняется в фоновом режиме другим сценарием

1 Ответ

0 голосов
/ 16 октября 2018

Используйте переменную 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, фактически выходя из цикла while.

...