![如何强制 pacman 对所有问题都回答“是”?](https://linux22.com/image/87123/%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%20pacman%20%E5%AF%B9%E6%89%80%E6%9C%89%E9%97%AE%E9%A2%98%E9%83%BD%E5%9B%9E%E7%AD%94%E2%80%9C%E6%98%AF%E2%80%9D%EF%BC%9F.png)
我正在尝试从脚本运行 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