我有一个执行块,用于运行外部安装脚本,但我对此无权控制。该安装脚本有时会立即执行我想要的操作,而有时则首先运行任意数量的更新,然后需要再次调用才能进行实际安装。更新过程返回失败 1,而实际安装返回成功 0。有没有一种优雅的方法可以重新运行执行块,直到脚本返回 0?
当然,我可以将执行块的多个副本放入配方中,这些副本仅在要创建的文件夹不存在时运行,并且忽略运行是否成功。但那样会非常丑陋和不合时宜。
答案1
您可以将脚本用作具有空体的“until”循环中的条件:
until ./install_script ; do : ; done
Colon 是一个“不做任何事”的命令,“until”只是在其条件命令返回 false 值(非零退出状态)时循环。通常用于条件的方括号实际上是“test”命令的别名。
挑剔:这更像是 shell 问题而不是 chef 问题。您可能想要更改标签。