“是”命令的意义是什么?

Jar*_*bin 92 utilities

这个问题与yesUNIX 和 Linux 机器中的命令有关:基本上,这个工具的意义(如果有的话)和历史是什么?它有实际应用吗?是否可以显示一个示例在脚本中有用的地方或与其他工具链接(通过管道或重定向)的地方?

手册页如下:

YES(1)                    BSD General Commands Manual                   YES(1)

NAME
     yes -- be repetitively affirmative

SYNOPSIS
     yes [expletive]

DESCRIPTION
     yes outputs expletive, or, by default, ``y'', forever.

HISTORY
     The yes command appeared in 4.0BSD.

4th Berkeley Distribution        June 6, 1993        4th Berkeley Distribution
Run Code Online (Sandbox Code Playgroud)

示例输出:

$ yes why
why
why
why
why
^Cwhy
Run Code Online (Sandbox Code Playgroud)

Jos*_* R. 111

它通常用作为交互式脚本提供答案的快速而肮脏的方式:

yes | rm -r large_directory
Run Code Online (Sandbox Code Playgroud)

不会提示您删除任何文件。当然,在 的情况下rm,您可以随时提供-f以使其蒸汽滚动目录删除,但并非所有工具都如此宽容。

更新

我最近遇到的一个更相关的例子是,当你正在fsck处理一个文件系统并且你不想y在修复每个错误之前在提示时费心回答:

yes | fsck /dev/foo
Run Code Online (Sandbox Code Playgroud)

  • @JarydMalbin,是的,因为这是 SIGPIPE 的默认行为。 (21认同)
  • 这是否意味着一旦 `rm` 完成,`yes` 输出就会停止? (5认同)
  • @JarydMalbin 是的。当 `rm` 停止从管道读取(读取:完成)时,`yes` 获得一个 SIGPIPE,如 cjm 的注释 (4认同)
  • 根据手册,“fsck -y /dev/foo”应该在某些文件系统上执行相同的操作。我最想说的是:手册记录了 minix 和cramfs 的例外情况。 (2认同)

cof*_*Mug 27

除了上一个答案中提到的要点之外,该yes命令还可用于测试系统上的高 CPU 负载。yes创建一个充当虚拟 CPU 加载程序并导致 100% 处理器使用率的进程。http://en.wikipedia.org/wiki/Yes_(Unix)


nba*_*ari 12

在 FreeBSD 工作站上更新端口时,使用 portmaster + yes 变得非常方便:

yes | portmaster -da
Run Code Online (Sandbox Code Playgroud)

这样你就可以在午餐时让机器更新,所有问题都默认为“y,yes”

当重建世界对“使删除老”和“做删除,老库”。

这是一个很大的节省时间:

yes | make delete-old
Run Code Online (Sandbox Code Playgroud)

和

yes | make delete-old-libs
Run Code Online (Sandbox Code Playgroud)

基本上可以帮助您避免输入/确认要求“y”或“yes”的某些操作