¿Qué es exactamente la función que se conecta a la otra función en esta bomba de bifurcación :(){ :|: & };:?

¿Qué es exactamente la función que se conecta a la otra función en esta bomba de bifurcación :(){ :|: & };:?

Hay un par de preguntas relacionadas con la bomba fork para bash :(){ :|: & };:, pero cuando revisé las respuestas todavía no podía entender qué hace exactamente la parte de la bomba cuando una función se conecta a la siguiente, básicamente esta parte: :|:.

Hasta ahora entiendo que el símbolo de tubería conecta dos comandos conectando la salida estándar del primero a la entrada estándar del segundo, por ejemplo, echo "Los pavos dominarán el mundo" | sed 's/s//'.

Pero no entiendo qué es lo que la primera función está impulsando a través de su estándar, que es empujado hacia la segunda; después de todo, no hay valores de retorno definidos dentro de la función, entonces, ¿qué está viajando a través del ciempiés humano si el hombre en el ¿El principio tiene el estómago vacío?

Respuesta1

Respuesta corta: nada.

Si un proceso no recibe nada en STDIN, aún puedes canalizarlo. De manera similar, aún puedes canalizar desde un proceso que no produce nada en STDOUT. Efectivamente, simplemente estás canalizando un único indicador EOF al segundo proceso, que simplemente se ignora. La construcción utilizando la tubería es simplemente una variación del tema de "cada proceso inicia dos más". Esta bomba de horquilla también podría escribirse (y a veces se escribe) como:

:(){ :&:; }; :

Cuando la primera llamada recursiva se pone en segundo plano inmediatamente, se realiza la segunda llamada.

En general, sí, el símbolo de canalización ( |) se usa para hacer exactamente lo que mencionaste: conectar STDOUT del primer proceso a STDIN del segundo proceso. Eso es también lo que está haciendo aquí, aunque lo único que pasa por ese tubo es el único indicador EOF.

información relacionada