我想知道这个yes
命令可能有什么用处,我偶然发现这条评论,并尝试执行
yes $(yes yes)
据我了解,这应该简单地打印出无限序列yes
,但它什么也不输出,并在几秒钟后使我的图形终端崩溃。 (如果我在 tty1 上执行它,我会在一段时间后看到登录提示。)
这里发生了什么?
答案1
应该已经足够运行了
echo $(yes yes)
运行$(...)
内部命令直到完成并捕获其所有输出。 - 现在,由于yes
运行时间较长并生成大量输出,bash 最终会耗尽内存并崩溃。
答案2
要查看关闭 shell 的错误消息,您需要运行一个子 shell。
$ sh
$ kill -9 $$
Killed
$
$ sh
$ yes $(yes yes)
sh: xrealloc: cannot allocate 18446744071562067968 bytes
$