我正在阅读一些命令解释shell.com并找到一个有趣的命令:
:(){ :|:& };:
目前我正在使用OSX
它,我能找到的唯一参考是在builtin
手册页 ( man builtin
) 上,但这没有帮助,因为它只说明它是外部命令、cshell 还是 sh 命令。
Command External csh(1) sh(1)
! No No Yes
% No Yes No
. No No Yes
: No Yes Yes
那么,执行有什么:
作用呢?
在终端上我没有输出:
$ :
$
答案1
在本例中,:
它不是命令,而是您定义的函数的名称。该命令:(){ :|:& };:
就是所谓的“forkbomb” - 它是一个命令序列,定义了一个名为 的函数:
,告诉 shell 该函数包括调用:
、将输出通过管道传输到 的另一个实例:
,以及将第二个实例置于后台。最终;:
序列终止函数的定义,然后调用它。每次调用都会:
导致另外两个副本:
运行,其速度与 shell 生成它们的速度一样快。
这将导致耗尽所有系统资源,如果没有设置进程限制,最终会导致系统变慢或崩溃。
答案2
如果你不redefine :
,它的默认含义是无操作。您可以使用以下命令查看其文档help :
% help :
:: :
No effect; the command does nothing. A zero exit code is returned.
传说很久以前,在互联网刚刚兴起的时候,这是一种将文本放入 shell 脚本中但不会被执行的方法。换句话说,一种评论。我没有这方面的书面资料。