在 RPM Linux 上安装任何东西时,dnf
在最简单的调用中,当出现提示时,默认答案是“N”(否),并且用户需要按“Y”(或“y”),然后按 Enter 来安装软件包。只需按 Enter 键即可中止安装。
在基于 Debian 的系统上执行相同的操作,apt
默认为“Y”(是),如果不小心按两次 Enter 键,可能会导致系统严重后果(特别是因为apt
如果软件包与您要安装的软件包冲突,则会愉快地在同一进程中卸载软件包) )。
因此我的问题是:是否可以使apt
的提示符也默认为“N”?
这应该是一个配置,而不是一个别名命令行选项,因为系统正在部署。
答案1
戳在来源:
if (YnPrompt(_("Do you want to continue?")) == false)
各个地方依赖函数YnPrompt()
为了这:
// YnPrompt - Yes No Prompt. /*{{{*/ // --------------------------------------------------------------------- /* Returns true on a Yes.*/ bool YnPrompt(char const * const Question, bool const Default, bool const ShowGlobalErrors, std::ostream &c1o, std::ostream &c2o) { ...
bool YnPrompt(char const * const Question, bool const Default) { return YnPrompt(Question, Default, true, c1out, c2out); }
// prompting APT_PUBLIC bool YnPrompt(char const *const Question, bool Default = true); bool YnPrompt(char const * const Question, bool const Default, bool const ShowGlobalErrors, std::ostream &c1o, std::ostream &c2o);
如果启用了提示,则有一个部分可以翻译/本地化各种语言中任一[Y/n]
或较不常见(确实存在,请参阅下面的示例)的显示:[y/N]
if (Default == true) // TRANSLATOR: Yes/No question help-text: defaulting to Y[es] // e.g. "Do you want to continue? [Y/n] " // The user has to answer with an input matching the // YESEXPR/NOEXPR defined in your l10n. c2o << " " << _("[Y/n]") << " " << std::flush; else // TRANSLATOR: Yes/No question help-text: defaulting to N[o] // e.g. "Should this file be removed? [y/N] " // The user has to answer with an input matching the // YESEXPR/NOEXPR defined in your l10n. c2o << " " << _("[y/N]") << " " << std::flush;
进而那个部分如果没有答案,它将检索提示的输入已被 APT 配置强制。
Default
因此提示取决于调用函数时使用的参数值。
只有少数地方提供了此参数(偏离默认[Y/n]
提示/Yes
答案),并且每次都直接将其作为常量提供:它不依赖于任何 APT 配置。示例发现于来源为了apt-mark
:
if (YnPrompt(_("Do you want to continue?"), false) == false)
和错误的要求提示[y/N]
,给出:
# apt-mark minimize-manual
The following packages will be marked as automatically installed:
[...]
Do you want to continue? [y/N]
#
所以有APT配置来避免触发这样的提示APT::Get::Assume-Yes
或者APT::Get::Assume-No
Yes
直接用或替换提示符No
,或者使用模拟时(最后一个例子:APT::Mark::Simulate
)不执行任何操作也不提示,但至少在 Debian 12 的 apt 版本 2.6.1 之前似乎没有任何 APT 配置来保持提示并将默认提示/答案从[Y/n]
/更改Yes
为[y/N]
/ No
,也不能将默认提示/答案从[y/N]
/更改No
为[Y/n]
/ Yes
。
结论:目前该功能不可用。它可以通过创建一两个新的专用 APT 配置参数(类似于“如何”APT::Get::Assume-Yes
和“工作” )来实现APT::Get::Assume-No
,可以检查这些参数以更改对传递的参数YnPrompt()
的评估方式。Default
或者可能有其他 APT 配置参数专用于特定的 APT 命令(例如:apt-mark
)来更改该命令在查询 时将传递的内容YnPrompt()
,但目前不存在。