Qual é exatamente a função canalizada para a outra função nesta bomba fork :(){ :|: & };:?

Qual é exatamente a função canalizada para a outra função nesta bomba fork :(){ :|: & };:?

Há algumas perguntas relacionadas à fork bomb para bash :(){ :|: & };:, mas quando verifiquei as respostas ainda não consegui descobrir o que exatamente a parte da bomba está fazendo quando uma função passa para a próxima, basicamente esta parte: :|:.

Entendo até agora que o símbolo de barra vertical conecta dois comandos conectando a saída padrão do primeiro à entrada padrão do segundo, por exemplo, echo "Os perus dominarão o mundo" | sed 's/s//'.

Mas eu não entendo o que a primeira função está empurrando para fora de seu padrão, que é empurrado para o segundo, afinal não há valores de retorno definidos dentro da função, então o que está viajando pela centopéia humana se o homem no começo está com o estômago vazio?

Responder1

Resposta curta: nada.

Se um processo não receber nada no STDIN, você ainda poderá canalizá-lo. Da mesma forma, você ainda pode canalizar um processo que não produz nada em STDOUT. Efetivamente, você está simplesmente canalizando um único indicador EOF para o segundo processo, que é simplesmente ignorado. A construção com tubo é simplesmente uma variação do tema “cada processo começa mais dois”. Esta bomba garfo também pode ser (e às vezes é) escrita como:

:(){ :&:; }; :

Onde a primeira chamada recursiva é colocada em segundo plano imediatamente, a segunda chamada é feita.

Em geral, sim, o símbolo de barra vertical ( |) é usado para fazer exatamente o que você mencionou - conectar STDOUT do primeiro processo ao STDIN do segundo processo. Isso também é o que está acontecendo aqui, embora a única coisa que passa por esse tubo seja o único indicador EOF.

informação relacionada