【问题标题】:Run each command until it succeeds, or exit the program if one fails N times运行每个命令直到它成功,如果一个失败N次则退出程序
【发布时间】:2021-01-08 05:44:46
【问题描述】:

我有一些命令,如果失败,我想重试最多 5 次这些命令。 所以我尝试循环执行这些命令。

我正在做类似下面的事情

# execute command1
n=0
until [ $k -ge 5 ]
do
   command1 && break
   sleep 1
   n=$[$n+1]
   if [ "$n" -eq 5 ]; then
    exit 1
   fi
done
# execute command3
k=0
until [ $k -ge 5 ]
do
   command2 && break
   sleep 1
   k=$[$k+1]
   if [ "$k" -eq 5 ]; then
    exit 1
   fi
done
# execute command3
s=0
until [ $s -ge 5 ]
do
   command3 && break
   sleep 1
   s=$[$s+1]
   if [ "$s" -eq 5 ]; then
    exit 1
   fi
done

是否可以在一个循环中执行所有 3 个命令,但有一个条件,每个命令应仅执行一次,并且还应按顺序执行,这意味着第二个命令仅应在第一次完成时执行。

可能还有其他一些不使用循环的方法。我的目标是执行所有命令,如果失败,它应该重试 5 次。我只能使用 linux 预装的实用程序。我无法安装任何第三方命令。

提前致谢。

【问题讨论】:

    标签: bash loops


    【解决方案1】:

    像这样?

    for i in {1..5}; { cmd1 && cmd2 && cmd3 && break; }
    

    使用ls进行测试:

    $ for i in {1..5}; { ls && ls && ls && break; }
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    

    所有命令只执行一次。现在出现错误:

    $ for i in {1..5}; { ls && ls && ls not_exist 2>/dev/null && break; }
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    f1  f2  f3  inventory.py  inv_test  ips  list  list2  list3 test  test2
    

    循环了 5 次。

    【讨论】:

    • 感谢您的回答。每个命令应该只工作 1 次。如果第一次执行成功但第二次失败,那么它将再次执行 1 个命令。
    猜你喜欢
    • 2016-10-08
    • 2023-04-04
    • 2012-10-09
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多