yes命令似乎太简单,没有任何实际用途,但是在本教程中,我们将向您展示它的应用程序,以及如何从Linux和macOS中被压抑的积极性中获益。
yes命令是Linux和macOS等类似Unix的操作系统中最简单的命令之一。简单,我们指的是简单的使用和初始实现。在system7unix中发布的原始版本的源代码由kenthompson编写,总共只有六行代码。
但不要因为它是一个简单的小命令就把它一笔勾销。它可以用在一些有趣和有用的方式。
在没有任何命令行参数的情况下使用yes命令,其行为就像您键入“y”并反复(反复)按Enter键一样。很快。它将继续这样做,直到您按Ctrl+C来中断它。
yes事实上,yes可以用于重复生成您选择的任何消息。只需键入yes、空格和要使用的字符串,然后按Enter键。这通常用于使yes生成“yes”或“no”字符串的输出流。
yes yesyes anything you likeyes的输出可以通过管道传输到其他程序或脚本中。
这听起来熟悉吗?你开始了一个漫长的进程,然后走开,让它继续运行。当你回到你的电脑,这个过程还没有完成。在你不在的时候,它会问你一个问题,然后坐在那里等待“是”或“否”的回答。
如果你事先知道你所有的回答都是肯定的(“是”或“y”)或否定的(“否”或“n”),你可以用“是”为你提供这些回答。然后,您的长流程将在无人值守的情况下运行到完成,并为流程提出的任何问题****。
请看下面的bashshell脚本。(我们需要设想,这是一个更大的脚本的一部分,需要相当长的时间才能运行。)
#!/bin/bash # ... # in the middle of some long script # obtain a resp***e from the user # ... echo "Are you happy to proceed? [y,n]" read input # did we get an input value? if [ "$input" == "" ]; then echo "Nothing was entered by the user" # was it a y or a yes? elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then echo "Positive resp***e: $input" # treat anything else as a negative resp***e else echo "negative resp***e: $input" fi此脚本提出一个问题并等待响应。脚本中的逻辑流由用户的输入决定。
要对此进行测试,请将脚本复制到一个文件中,并将其保存为long_脚本.sh。使用chmod使其可执行。
chmod +x long_script.sh使用以下命令运行脚本。尝试提供“是”、“y”和其他任何输入,包括在不输入文本的情况下按Enter键。
./long_script.sh要获得yes以提供我们对脚本问题的响应,请将yes的输出通过管道传输到脚本。
yes | ./long_script.sh有些脚本的要求更加严格,只接受完整的“是”字作为肯定的回答。您可以提供“yes”作为yes的参数,如下所示:
yes yes | ./long_script.sh你需要确定你将要输入到脚本或程序中的输入肯定会给你预期的结果。要做出决定,你必须知道问题和你的回答。
脚本、命令或程序中的逻辑可能与您的期望不匹配。在我们的示例脚本中,问题可能是“您希望停止吗?如果是这样的话,否定的回答会让脚本继续。
您必须熟悉脚本、命令或程序,然后才能轻松地将“是”引入其中。
在初期,yes将与其他Linux命令一起使用。从那时起,大多数其他Linux命令都有自己的运行方式,无需人工交互。实现这一目标不再需要“是”。
让我们以Ubuntu包管理器apt-get为例。要安装应用程序而不必在安装过程中按“y”,应按以下方式使用“是”:
yes | sudo apt-get install fortune-mod使用apt get中的-y(假设是)选项可以获得相同的结果:
sudo apt-get -y install fortune-mod你会发现apt-get甚至没有像往常那样问“你想继续吗?[是/否]“问题。它只是假设答案是“是的”
在其他Linux发行版上,情况也是如此。在Fedora上,您可能曾经使用过这种类型的包管理器命令:
yes | yum install fortune-moddnf包管理器已经取代了yum,并且dnf有自己的-y(假设是)选项。
dnf -y install fortune-mod这同样适用于cp、fsck和rm。这些命令都有自己的-f(force)或-y(假设是)选项。
那么“是”似乎被降级为只处理脚本了吗?不完全是。这只老狗还有几招呢。
您可以将yes与seq生成的数字序列一起使用,以控制重复操作的循环。
这一行将生成的数字回显到终端窗口,然后调用sleep一秒钟。
您可以调用另一个命令或脚本,而不是简单地将数字回显到终端窗口。该命令或脚本甚至不需要使用数字,它们只用于启动循环的每个周期。
yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done有时有一个大文件来测试是有用的。也许你想练习使用zip命令,或者你想有一个相当大的文件来测试FTP上传。
您可以使用yes快速生成大型文件。你所需要做的就是给它一个长的文本字符串,并将输出重定向到一个文件中。别搞错了,那些文件会迅速增长的。准备在几秒钟内按Ctrl+C。
yes long line of meaningless text for file padding > test.txt ls -lh test.txt wc test.txt这里生成的文件在用于研究本文的测试机器上花费了大约5秒钟。ls报告它的大小是557mb,wc告诉我们其中有1240万行。
我们可以通过在命令字符串中包含head来限制文件的大小。我们告诉它文件中要包含多少行。-50意味着头部只允许50条线穿过测试.txt文件。
yes long line of meaningless text for file padding | head -50 > test.txt只要有50行测试.txt文件,进程将停止。您不需要使用Ctrl+C,它会根据自己的意愿优雅地停止。
wc报告说,文件中正好有50行,400字,大小为2350字节。
即使它对于将响应输入到长时间运行的脚本(以及其他一些技巧)仍然很有用,yes命令也不会成为日常命令工具箱的一部分。但是当你真的需要它的时候,你会发现它本身就是简单的,而且有六行黄金代码。
... 不寻常的是,您会被提示同意Microsoft EULA(以下是如何理解EULA)。现在,这是一个令人毛骨悚然的地方:你可能对此有保留。尽管这些TrueType字体(不同于OpenType字体)已经免费提供,但您会注意到它们不是开源的。此外...
...不要担心。有几种方法可以用来恢复它。我们将向您展示如何在Windows中重置管理员密码。 ...
... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...
...可以选择使用设备RAM进行临时读/写文件存储。当您决定如何使用非常小的web服务器时,您可能需要更改这一点。 ...
为您的电视和电影收藏设计终极媒体服务器可能是一项挑战。你应该使用什么硬件,你应该安装什么操作系统,你应该运行什么样的软件? ...
...亏了Windows PowerShell,您可能不再需要腻子了。让我们看看如何在windows10中设置SSH访问,以及新工具是否可以取代PuTTY。 ...
...,Kali Linux提供了扩展道德黑客技能所需的一切。下面是如何将Kali Linux加载到Raspberry Pi 3上的。 ...
... 无论您是Python编程新手还是专家,让我们来看看您如何在Android设备上充分发挥pydroid3的潜力。 ...
... 许多Linux服务器运行Ubuntu。那么,让我们看看如何在Ubuntu服务器上设置FTP服务器。 ...