apt:将默认答案从“Y”更改为“N”

apt:将默认答案从“Y”更改为“N”

在 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);
}

Default默认为true:

// 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-NoYes直接用或替换提示符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(),但目前不存在。

相关内容