命令“:”有什么作用?

And*_*rao 1 shell bash

我在explainshell.com上阅读了一些命令并发现了一个有趣的命令:

:(){ :|:& };:
Run Code Online (Sandbox Code Playgroud)

目前我在OSX,我能找到的唯一参考是在builtin手册页 ( man builtin) 上,但这没有帮助,因为它只说明它是外部、cshell 还是 sh 命令。

       Command       External    csh(1)    sh(1)
       !             No          No        Yes
       %             No          Yes       No
       .             No          No        Yes
       :             No          Yes       Yes
Run Code Online (Sandbox Code Playgroud)

那么,执行有:什么作用呢?

在终端上我没有输出:

$ :
$
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn 10

在这种情况下,:不是命令,而是您定义的函数的名称。该命令:(){ :|:& };:就是所谓的“forkbomb”——它是一个命令序列,它定义了一个名为 的函数:,告诉外壳该函数包括调用:、将输出管道传送到 的另一个实例:,以及使第二个实例成为后台。最后的;:序列终止函数的定义,然后调用它。每次调用都会:导致另外两个副本:运行,与 shell 生成它们的速度一样快。
这将导致耗尽所有系统资源,如果没有设置进程限制,最终会导致系统变慢或崩溃。