如何强制 pacman 对所有问题都回答“是”?

如何强制 pacman 对所有问题都回答“是”?

我正在尝试从脚本运行 pacman。问题是应该安装一个冲突的包,但不能替换当前安装的包。正如所回答的这里我通过了 --noconfirm 选项,并且由于 pacman 的 stdin 没有指向 tty,因此它假定默认答案为“否”。如何强制 pacman 对所有问题都回答“是”?请注意,我无法将任何输入传递给 pacman(它通过 makechrootpkg 运行),因此我无法使用yes建议的命令或类似命令这里

这是 pacman 的输出:

loading packages...
resolving dependencies...
looking for conflicting packages...
:: libinput-ubuntu and libinput are in conflict. Remove libinput? [y/N] 
error: unresolvable package conflicts detected
error: failed to prepare transaction (conflicting dependencies)

答案1

有一个未记录的选项 ( --ask BITMASK) 可以反转默认答案(在pacman测试中使用)。定义了以下位枚举 ( alpm.h):

   typedef enum _alpm_question_type_t {
        ALPM_QUESTION_INSTALL_IGNOREPKG = (1 << 0),
        ALPM_QUESTION_REPLACE_PKG = (1 << 1),
        ALPM_QUESTION_CONFLICT_PKG = (1 << 2),
        ALPM_QUESTION_CORRUPTED_PKG = (1 << 3),
        ALPM_QUESTION_REMOVE_PKGS = (1 << 4),
        ALPM_QUESTION_SELECT_PROVIDER = (1 << 5),
        ALPM_QUESTION_IMPORT_KEY = (1 << 6)
    } alpm_question_type_t;

要自动替换包,请使用:

sudo pacman -S  PKGNAME  --ask 4

答案2

由于似乎没有实现这一目标的选项,我研究了 pacman 源代码并创建了一个补丁来--yes向 pacman 添加选项:https://bugs.archlinux.org/task/48835

相关内容