Ubuntu16.04下apt-get升级Grub配置弹窗致自动化脚本挂起求助
解决apt-get upgrade时grub配置弹窗导致脚本停滞的问题
这个弹窗是dpkg处理配置文件冲突时的交互提示——当系统检测到你本地修改过/etc/default/grub,而更新包带来了新版本的配置文件时,就会弹出选择框,普通的-y或者--allow*参数根本管不住它,毕竟这是dpkg层面的交互,不是apt的范畴。
下面给你几个靠谱的解决方法,按场景选就行:
1. 临时启用非交互模式(单次命令)
直接在apt命令前设置DEBIAN_FRONTEND=noninteractive环境变量,让整个dpkg过程跳过所有交互提示,默认处理配置文件:
DEBIAN_FRONTEND=noninteractive apt-get -y upgrade
这个方法简单直接,适合临时的自动化脚本,执行完后环境变量不会保留。
2. 精准控制配置文件处理(推荐)
如果你想更精细地指定如何处理配置文件(比如保留本地修改的grub配置),可以给apt传递dpkg的选项:
apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
--force-confdef:如果dpkg能找到默认的处理方式(比如新配置和旧配置无冲突,或者有官方默认选项),就自动用默认;--force-confold:如果没有默认方式,就保留本地修改的旧配置文件,完全跳过弹窗。
这个组合既安全又灵活,不会意外覆盖你的本地修改。
3. 全局配置(长期自动化环境)
如果你的机器是专门用于自动化的,可以把这些选项写到apt的全局配置里,以后所有apt操作都自动生效:
- 创建一个新的apt配置文件:
echo 'APT::Get::Assume-Yes "true";' > /etc/apt/apt.conf.d/99noninteractive echo 'Dpkg::Options:: "--force-confdef";' >> /etc/apt/apt.conf.d/99noninteractive echo 'Dpkg::Options:: "--force-confold";' >> /etc/apt/apt.conf.d/99noninteractive
- 之后直接执行
apt-get upgrade就不会再弹出任何交互提示了。
补充说明
如果之后你需要手动更新grub配置,可以运行dpkg-reconfigure grub-pc来重新触发配置流程,这时候你就能手动选择是否替换配置文件了。
内容的提问来源于stack exchange,提问作者Armen
相关产品推荐
相关产品推荐

