运行一个非常慢的脚本直到成功

运行一个非常慢的脚本直到成功

我的脚本fetch_remote_work.sh非常慢,因为它连接到网络。我需要运行它很多次直到它起作用。

./fetch_remote_work.sh

while [ $? -ne 0 ]
do
    ./fetch_remote_work.sh
done

这显然效果很好。然而,我不喜欢有义务打电话给第一个./fetch_remote_work.sh。我知道在其他语言中,例如,有一个做一会儿至少运行第一次迭代的循环。如果它存在的话会非常干净

所以我的问题是:有没有比我所做的更干净的方法?

答案1

使用命令本身作为while构造的条件。

while ! ./fetch_remote_work.sh; do :; done

答案2

如果你想运行一些东西直到它有一个零返回代码,

until [ $RANDOM -eq 42 ]
do 
  echo looking for the answer to life, the universe, and everything
done

(或作为单行)

until [ $RANDOM -eq 42 ]; do echo looking for the answer to life, the universe, and everything; done

对于你的例子:

until ./fetch_remote_work.sh; do :; done

这个循环“什么也不做”(执行:内置直到fetch_remote_work.sh 脚本返回 0。

答案3

将第一行更改为false,强制第一次迭代达到所需条件。

相关内容