unix/linux 中有一个yes
命令基本上可以无限地打印y
到stdout
.它有什么意义,有什么用处?
答案1
yes 可用于向任何原本请求响应的命令发送肯定(或否定;例如 yes n)响应,从而使命令以非交互方式运行。
yes 命令与 head 命令结合使用可以生成大容量文件以进行测试。
它还可用于测试系统处理高负载的情况,因为对于具有单处理器的系统,使用 yes 会导致 100% 处理器使用率(对于多处理器系统,必须为每个处理器运行一个进程)。例如,这对于调查处理器 100% 运行时系统的冷却系统是否有效非常有用。
2006 年,yes 命令因作为测试用户的 MacBook 是否受到间歇性关机综合症影响的一种手段而受到宣传。通过在 Mac OS X 下通过终端运行 yes 命令两次,用户能够最大限度地利用计算机的 CPU,从而查看故障是否与热有关
答案2
这可能是一个有争议的观点,但在我看来这是对命令行工具中不良用户界面的丑陋修复。
一些命令行工具会通过提示向用户询问问题,并且没有非交互运行的选项;想象一下诸如这样的事情
$ frobnicate *
frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
...
由于问题的答案是从标准输入中获取的,因此解决此问题的一个快速方法是使用一个连续输出字符串的应用程序y\n
,这正是它的yes
作用。 Unix管道可用于将此输出作为给定命令的输入发送。
$ yes | frobnicate
这种方法的问题之一是yes
无法检查它正在回答的问题:
frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
format device /dev/sda1? (y/n) y
frobnicate file c.txt? (y/n) y
更好的解决方案(如果可用)是非交互运行的特定选项,例如rm -f
或apt-get -y
。这允许在应用程序中编写更明智的行为。
答案3
我喜欢yes
在解压缩多个 .zip 文件时使用,这些文件都包含具有相同名称的相同文件,并且系统会询问我在每种情况下要做什么(例如许可协议)。
yes | for z in *.zip; do unzip "$z"; done
答案4
一位同事以一种新颖的方式使用它来输入密码
yes password | passwd