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 的答案,可能是yes或Y。为了适应这一点,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只会打印一行输出。因此,当我们必须回答多个问题时,这种方法将不起作用。