等待 bash 中的条件变为真

Ale*_*uss 6 bash shell

在编写 shell 脚本时,我经常需要等待给定的条件变为真,例如远程 URL 变得可用(使用curl 检查)或应该存在的文件等。

理想情况下,我希望有一个函数或脚本,await以便我可以编写,例如,

await [[ some condition ]]
Run Code Online (Sandbox Code Playgroud)

它会每秒检查一次条件,直到条件变为真或发生超时。理想情况下,我可以设置轮询间隔和超时。

有这样的工具吗?

tha*_*guy 15

您可以使用until循环:

until some condition
do
  sleep 5
done
Run Code Online (Sandbox Code Playgroud)

例如

until nc -z localhost 22
do
  echo "SSHd is not up yet. Waiting..."
  sleep 5
done
Run Code Online (Sandbox Code Playgroud)

如果要添加超时,则必须使用计数器或使用内部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
Run Code Online (Sandbox Code Playgroud)