Debian 9及以上版本apt update --allow-releaseinfo-change兼容方案问询
Debian跨版本兼容apt-get update的最优解决方案
原有方案的缺陷
你当前使用的判断发行版代号的方案存在两个明显问题:
- 依赖
lsb-release额外包,Debian 9 最小安装环境默认未预装该包,会直接触发命令不存在的报错 - 对Debian衍生发行版兼容性差,比如基于Debian 9的Proxmox VE、树莓派OS等版本,
lsb_release -cs返回值不为stretch,会触发错误的分支逻辑
--allow-releaseinfo-change是APT 1.5版本才新增的参数,Debian 9默认APT版本为1.4.x不支持该参数,因此通过检测参数是否存在的逻辑比硬编码版本/发行版代号判断更可靠。
更优解决方案
方案1:参数支持性检测(最推荐)
直接检测apt-get是否支持对应参数,不依赖任何额外包,兼容性覆盖所有Debian 9及以上版本:
if apt-get --help | grep -q -- '--allow-releaseinfo-change'; then apt-get update --allow-releaseinfo-change else apt-get update fi
如果你需要保留原命令的-qq静默参数,调整后的写法如下:
if apt-get --help | grep -q -- '--allow-releaseinfo-change'; then apt-get -qq update --allow-releaseinfo-change else apt-get -qq update fi
方案2:失败回退写法(最简洁)
如果不需要严格区分更新失败的原因,可使用短路写法实现相同效果,代码更短:
apt-get -qq update || apt-get -qq update --allow-releaseinfo-change
逻辑为首次执行不带参数的更新,若执行失败则自动重试带参数的版本,绝大多数场景下可正常工作。
内容的提问来源于stack exchange,提问作者Michal Špondr
相关产品推荐
相关产品推荐

