例如国内使用默认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循环(for,while,until,break与continue)