在软件包安装期间抑制命令行问题

在软件包安装期间抑制命令行问题

我有一个基于 Ubuntu 16.04 的设备,其中安装了来自公共存储库的软件包。但不直接使用公共存储库。而是使用更新服务器下载软件包,然后将它们放入一个文件中。系统上的更新程序获取该文件,提取软件包并安装它们。

最近,base-files 包给我带来了一些麻烦,其中包含文件 /etc/issue(似乎包含 Ubuntu 版本):

Setting up base-files (9.4ubuntu4.8) ...

Configuration file '/etc/issue'
 ==> 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.

到目前为止,更新程序使用以下命令行安装了该软件包:

DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --quiet --yes --force-yes install [Absolute path of the packages]

出现该问题后,我尝试了以下命令行:

DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -o Dpkg::Options::="--force-confnew" --quiet --yes --force-yes install [Absolute path of the packages]

但不幸的是,这并没有改变任何事情。

现在我的问题是,是否有任何选择可以解决该问题。

答案1

感谢德国 Ubuntu 论坛的用户 seahawk1986: https://forum.ubuntuusers.de/topic/kommandozeilen-abfrage-bei-paketinstallation-u/

我找到了解决问题的方法: https://debian-handbook.info/browse/en-US/stable/sect.automatic-upgrades.html#id-1.9.17.9

我写了个脚本:

#!/bin/sh
export DEBIAN_FRONTEND=noninteractive
/usr/bin/yes '' | /usr/bin/apt-get --yes --force-yes --quiet -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install "$@"
  • --yes - 对每个问题都回答“是”
  • --force-yes - 强制对每个问题都回答“是”
  • --quiet — 不显示任何进度条。
  • -o Dpkg::Options::="--force-confdef" - 如果需要替换配置文件,则使用默认答案。
  • -o Dpkg::Options::="--force-confold" - 如果需要替换配置文件,则使用旧配置文件。以防 --force-confdef 不起作用。
  • “$@”——我传递给该脚本的所有包路径。
  • export DEBIAN_FRONTEND=noninteractive - 安装/更新软件包时仅使用非交互模式。

有趣的是

/usr/bin/yes '' |

到目前为止,我从未使用过“yes”。它只是打印“y”后跟换行符(表示 Enter),然后可以将其传送到标准输入 (stdin)。在这种情况下,我们只使用一个空字符串。这样,“yes”就会用 Enter 输入淹没 stdin。如果弹出问题,在大多数情况下,只需按 Enter 即可回答该问题,并使用默认选项。这就是帮助我的魔法。

希望这也能帮助其他面临相同或类似问题的人。

相关内容