Подождите, пока условие не станет истинным в bash - PullRequest
1 голос
/ 02 августа 2020

При написании сценариев оболочки мне неоднократно приходилось ждать, пока данное условие станет истинным, например, станет доступен удаленный URL-адрес (проверяется с помощью curl) или файл, который должен существовать, et c.

В идеале я хотел бы иметь функцию или скрипт await, чтобы я мог написать, например,

await [[ some condition ]]

, и он будет проверять условие каждую секунду, пока оно не станет истинным или не произойдет тайм-аут. . В идеале я могу установить интервал опроса и тайм-аут.

Есть ли инструмент для этого?

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Вы можете использовать until l oop:

until some condition
do
  sleep 5
done

например,

until nc -z localhost 22
do
  echo "SSHd is not up yet. Waiting..."
  sleep 5
done

Если вы хотите добавить тайм-аут, вам нужно будет добавить его отдельно со счетчиком или с помощью переменной SECONDS:

SECONDS=0
until nc -z localhost 22
do
  
  if (( SECONDS > 60 ))
  then
     echo "Giving up..."
     exit 1
  fi

  echo "SSHd is not up yet. Waiting..."
  sleep 5
done
0 голосов
/ 02 августа 2020

Я бы использовал утилиту timeout около while l oop, который использует sleep.

Например:

timeout 1 bash -c 'while :; do echo check; sleep 0.1; done ' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...