Was genau ist die Funktion, die in dieser Fork-Bombe :(){ :|: & };:? in die andere Funktion weiterleitet?

Was genau ist die Funktion, die in dieser Fork-Bombe :(){ :|: & };:? in die andere Funktion weiterleitet?

Es gibt einige Fragen zur Fork-Bombe für Bash :(){ :|: & };:, aber als ich die Antworten durchgesehen habe, konnte ich immer noch nicht herausfinden, was genau dieser Teil der Bombe macht, wenn eine Funktion in die nächste übergeht, im Grunde dieser Teil: :|:.

Soweit ich weiß, verbindet das Pipe-Symbol zwei Befehle, indem es die Standardausgabe des ersten mit der Standardeingabe des zweiten verbindet, z. B. „echo „Die Türken werden die Welt beherrschen“ | sed ‚s/s//‘.“

Ich verstehe aber nicht, was die erste Funktion über ihren Standardausgang ausgibt, was in die zweite Funktion ausgegeben wird. Schließlich sind innerhalb der Funktion keine Rückgabewerte definiert. Was reist also mit dem menschlichen Tausendfüßler, wenn der Mann am Anfang einen leeren Magen hat?

Antwort1

Kurze Antwort: nichts.

Wenn ein Prozess nichts über STDIN aufnimmt, können Sie trotzdem eine Pipe zu ihm durchführen. Ebenso können Sie immer noch eine Pipe von einem Prozess durchführen, der nichts über STDOUT produziert. Tatsächlich leiten Sie einfach einen einzelnen EOF-Indikator an den zweiten Prozess weiter, der einfach ignoriert wird. Die Konstruktion mit der Pipe ist einfach eine Variation des Themas „jeder Prozess startet zwei weitere“. Diese Fork-Bombe könnte auch so geschrieben werden (und wird es manchmal auch):

:(){ :&:; }; :

Wobei der erste rekursive Aufruf sofort in den Hintergrund gestellt wird, anschließend erfolgt der zweite Aufruf.

Im Allgemeinen |wird das Pipe-Symbol ( ) genau für das verwendet, was Sie erwähnt haben – STDOUT des ersten Prozesses mit STDIN des zweiten Prozesses verbinden. Das ist auch hier der Fall, obwohl das einzige, was jemals durch diese Pipe geht, der einzelne EOF-Indikator ist.

verwandte Informationen