apt-get update非交互式

20

我试图使更新过程完全非交互式。(在Ubuntu 14.04.3 LTS上) 我认为使用这种命令会很容易:

export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get upgrade -q -y --force-yes && apt-get dist-upgrade -q -y --force-yes

但是我总有这样一个问题:

Configuration file '/etc/cloud/cloud.cfg'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** cloud.cfg (Y/I/N/O/D/Z) [default=N] ?

你知道我怎么能自动接受默认值吗?


2
本网站是用于编程问题的。我们不提供一般操作系统/软件技术支持。 - Marc B
19
如何使apt非交互式是一个有效的问题。 - Mayou36
2
我们应该最终搞清楚是否还需要superuser.com。 - Torsten Bronger
2个回答

19

你需要向你的命令传递一些 dpkg 选项,例如:

export DEBIAN_FRONTEND=noninteractive
apt-get update && 
    apt-get -o Dpkg::Options::="--force-confold" upgrade -q -y --force-yes &&
    apt-get -o Dpkg::Options::="--force-confold" dist-upgrade -q -y --force-yes

顺便提一下,我建议只使用dist-upgrade,如果你使用upgrade,最终会导致损坏的依赖关系。


对于其他遇到此问题的同行,引用符号 Dpkg::Options 是错误的。正确的方式是:apt-get -o "Dpkg::Options::=--force-confold" dist-upgrade -y --force-yes - Irving
1
在使用sudo时,请确保将环境变量放在命令前面,而不是希望sudo不会剥离您的环境变量,例如:sudo DEBIAN_FRONTEND=noninteractive apt-get -o "Dpkg::Options::=--force-confold" dist-upgrade -y --force-yes - Irving
1
@Irving,那样引用对我来说有效,也许最近有些变化了? - ryanpcmcquen
W: --force-yes is deprecated, use one of the options starting with --allow instead. (apt v1.1 and newer). Looks like the new equivalent is --allow-downgrades --allow-remove-essential --allow-change-held-packages - jacobq

14

>= Apt 1.1

如果您使用的是Apt 1.1或更高版本,--force-yes已被弃用,因此您需要使用以--allow开头的选项,例如--allow-downgrades--allow-remove-essential--allow-change-held-packages

所以命令是:

DEBIAN_FRONTEND=noninteractive \
  apt-get \
  -o Dpkg::Options::=--force-confold \
  -o Dpkg::Options::=--force-confdef \
  -y --allow-downgrades --allow-remove-essential --allow-change-held-packages

注意:使用--force-confold保留旧配置,使用--force-confnew保留新配置。

来源:CFE-2360:使apt_get包模块版本感知

相关:


5
你的命令中好像缺少了“更新”这个词? - bovine
当 grub-efi 升级时,我仍然不幸被要求选择驱动器。有什么办法可以使它默认选择第一个选项吗? - Hackeron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接