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

msr*_*rd0 3 arch-linux 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)
Run Code Online (Sandbox Code Playgroud)

小智 8

有一个未记录的选项 ( --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;
Run Code Online (Sandbox Code Playgroud)

要自动替换包,请使用:

   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;
Run Code Online (Sandbox Code Playgroud)