sha*_*ant 0 command-line pipe function fork
有几个与 bash 的 fork 炸弹相关的问题:(){ :|: & };:,但是当我检查答案时,我仍然无法弄清楚当一个功能管道进入下一个功能时,炸弹的部分究竟在做什么,基本上是这部分::|:.
到目前为止,我了解管道符号通过将第一个命令的标准输出连接到第二个命令的标准输入来连接两个命令,例如 echo“土耳其将主宰世界” | sed 's/s//'。
但是我不明白第一个函数通过它的标准输出是什么,它被推送到第二个函数中,毕竟函数内部没有定义返回值,所以如果那个人在人类蜈蚣中传播的是什么开始是空腹?
简短的回答:没什么。
如果一个进程在 STDIN 上没有任何东西,你仍然可以通过管道连接到它。同样,您仍然可以从在 STDOUT 上不产生任何结果的进程中进行管道传输。实际上,您只是将单个 EOF 指示符通过管道传输到第二个进程中,这被简单地忽略了。使用管道的施工只是“每道工序多开始两道工序”这一主题的变体。这个叉子炸弹也可以(有时是)也写成:
:(){ :&:; }; :
Run Code Online (Sandbox Code Playgroud)
第一个递归调用立即后台调用,然后进行第二个调用。
一般来说,是的,管道符号 ( |) 用于执行您提到的操作 - 将第一个进程的 STDOUT 连接到第二个进程的 STDIN。这也是它在这里所做的,即使唯一通过该管道的是单个 EOF 指示器。