Contents

Linux中YES命令简介

1. 概述

在管理 Linux 环境时,我们经常需要通过一些包管理器来安装一堆应用程序。通常,我们编写脚本来自动执行此过程。

但是,我们的包管理器通常会在安装或更新程序之前要求确认。一些供应商甚至要求我们在安装继续之前遵守他们的使用条款。

如果不回答这些问题,我们的脚本就无法运行。他们会挂起,等待用户输入。

有不同的方法可以自动回答这些问题。

本文中的示例在 Bash 中进行了测试,但在其他 POSIX 兼容的 shell 中应该也能正常工作。

2. 检查自动是

大多数软件包管理器(如 yum 或 apt-get )都有内置选项,可以在安装期间对所有问题自动回答*“是”* 。

例如,让我们 通过打印其帮助信息来进一步了解yum

$ yum --help 
... 
  -q, --quiet         quiet operation 
  -v, --verbose       verbose operation 
  -y, --assumeyes     answer yes for all questions 
  --assumeno          answer no for all questions 
  --version           show Yum version and exit 
...

如这个部分输出所示,我们可以使用*-y*自动对所有问题回答是。现在,我们可以安装多个包:

yum install -y vim nginx postgresql

或者,也许我们想更新系统中的所有包:

yum update -y

apt-get命令有一个类似的*-y*选项。不幸的是,这并不适用于所有的工具。

3. yes命令

当我们要执行的程序没有自动应答选项时,我们可以使用yes  来发挥我们的优势。yes命令重复打印 y (yes) 直到被杀死:

$ yes
y
y
y
^c

我们可以将此输出通过管道传递给我们执行的命令。假设yum没有像*-y这样的选项。在那种情况下,我们可以使用yes*来自动回答所有问题,如下所示:

yes | yum install vim nginx postgresql

现在,每次安装要求我们回答一些问题时,无论是否是y/n问题, yes都会提供 y

yes还有一件事。我们可能不得不编写一个不同于y 的答案,可能是yesY。为了适应这一点,yes接受一个参数,即重复打印的字符串。

例如,要打印YES,我们将使用:

$ yes YES
YES
YES
YES
^c

我们应该注意,使用yes将回答所有问题,而不仅仅是是/否。

4. echo替代

作为yes的替代方法,我们可以使用echo 命令获得类似的结果。在这种情况下, echo命令实际上与yes非常相似 。它将给定的字符串参数打印到标准输出:

$ echo yes 
yes

我们可以像以前一样将此输出通过管道传输到任何程序:

echo y | yum install vim nginx postgresql

但是,这种方法有一个重要的警告。与yes不同,echo只会打印一行输出。因此,当我们必须回答多个问题时,这种方法将不起作用。