linux自动重试出错命令

例如国内使用默认channel安装pytorch比较困难,很容易网络连接超时,所以需要写一个脚本不断重试,记录一下刚写的一个简单脚本

#!/bin/bash

while true;do
        python -m pip install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111
        if [[ $? -eq 0 ]];then
                break
        fi
done

也可以不适用shell脚本,一行命令搞定

bash -c "while true; do command && break; done"

对shell脚本的逐行批注:

#!/bin/bash 用于指定执行的shell,否则将使用默认shell执行(sh、bash等),出现不可控的情况

while true;do 有的时候会看到没有分号的写法,但do在下一行,两种写法都可以,这里的分号起断句的作用

python -m pip install 也能看到直接写 pip install 的,区别在于用 python -m 执行的话会使用与python环境对应的pip,而直接使用pip install的话就使用的是环境变量中的pip,但有的时候和python环境还不是对应的

if [[ command ]];then 也能看到只用单个中括号的[],一般来说两者都行,但单括号的兼容性更好,而双括号的只支持部分常用的shell,还要注意command两边的空格

$? -eq 0 $用于获取变量,$? 可以获取上一条指令执行的结果,如果执行成功则返回0,否则为其他数值。-eq 就是 ==,其他的还有 -ne 表示 不等于,-gt 表示大于,-lt 表示小于等等

shell中[ ]与[[ ]]的区别

Shell if 条件判断

Shell循环(for,while,until,break与continue)

Leave a Comment