【问题标题】:Retry command line in bash script until successful then continue with script在 bash 脚本中重试命令行,直到成功,然后继续执行脚本
【发布时间】:2015-05-28 09:28:50
【问题描述】:

希望有人知道这个,我可以回答我的另一个问题。 Launchagent 尝试加载我的脚本太快,因此它失败了 - 我已将其 nice 设置为 20,其他所有设置到最后,但是在创建帐户时它仍然太快了。

该脚本调用cliclick,如果系统未作为未知命令正确登录,则会失败。所以,我的想法是这样的。

在脚本开始时运行cliclick -h,它会显示帮助菜单。如果它在未知命令上失败,请继续重复,直到它成功为止,然后继续执行脚本的其余部分。

确保脚本在用户处于桌面之前不会运行是一种肮脏的方法,我想不出更好的方法,但我也不知道如何实现它 - 所以 bash 脚本专家,如何循环 cliclick -h 直到它成功然后继续脚本的其余部分?

【问题讨论】:

    标签: macos bash shell scripting launchd


    【解决方案1】:

    我怀疑有更好的方法可以做到这一点,但您的实际问题的实际答案很简单。

    while ! cliclick -h; do
        sleep 1 # or more, or less
    done
    

    这假定cliclick -h 正确返回零(成功)退出代码。某些命令在使用-h 调用时将返回 1,以区分执行某些实际操作的正确成功操作。那么也许可以试试更丑的

    while true; do
        cliclick -h || test $? -eq 1 && break
        sleep 1 # or more, or less
    done
    

    【讨论】:

    • 嗯 - 我实际上最终使用了“直到”问题是,这并不能保证脚本可以运行,更重要的是,它会停止 cliclick-h 以后的工作!
    • 不过我有一个新想法 - 鉴于我不希望脚本在桌面可用之前运行,OS X 会创建桌面图像文件的缓存...我可以检查文件是否存在,如果不存在,请继续检查,如果存在,则运行脚本的其余部分。不知道到底是怎么回事
    【解决方案2】:

    你也可以使用until:

    until cliclick -h; do sleep 2; done ; say Done
    

    【讨论】:

      【解决方案3】:

      试试这个工具:https://github.com/kadwanev/retry

      retry -t 1000 -e cliclick -h
      

      检查退出代码,看看它在所有重试后是否成功...

      【讨论】:

      • 嘿 nkadwa 将把它作为正确的因为它是一个有用的工具,我也尝试过它以及使用“直到”。不幸的是,这不是导致我的问题的原因,我仍然坚持我的脚本,但没关系!
      猜你喜欢
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 2021-04-06
      • 1970-01-01
      • 2015-11-14
      相关资源
      最近更新 更多