Was macht der Befehl ":"?

Was macht der Befehl ":"?

Ich habe einige Befehle gelesen auferklärthell.comund finde einen interessanten Befehl:

:(){ :|:& };:

Momentan befinde ich mich darunter OSXund der einzige Verweis darauf, den ich finden konnte, war auf der builtinManpage ( man builtin), aber das hat nicht geholfen, weil dort nur steht, ob es sich um einen externen, cshell- oder sh-Befehl handelt.

       Command       External    csh(1)    sh(1)
       !             No          No        Yes
       %             No          Yes       No
       .             No          No        Yes
       :             No          Yes       Yes

Was also bewirkt die Ausführung :?

Auf dem Terminal erhalte ich keine Ausgabe:

$ :
$

Antwort1

In diesem Fall :ist kein Befehl, sondern der Name einer Funktion, die Sie definieren. Der Befehl :(){ :|:& };:ist eine sogenannte „Forkbomb“ – eine Befehlssequenz, die eine Funktion namens definiert :, der Shell mitteilt, dass die Funktion aus dem Aufruf von besteht :, die Ausgabe an eine andere Instanz von weiterleitet :und die zweite Instanz in den Hintergrund stellt. Die letzte ;:Sequenz beendet die Definition der Funktion und ruft sie dann auf. Jeder Aufruf von :führt dazu, dass zwei weitere Kopien von :ausgeführt werden, so schnell die Shell sie erstellen kann.
Dies führt dazu, dass alle Systemressourcen verbraucht werden, was schließlich dazu führt, dass das System langsamer wird oder abstürzt, wenn kein Prozesslimit festgelegt ist.

Antwort2

Wenn dunichtredefine :, es hat eine Standardbedeutung als No-Op. Sie können die Dokumentation dazu unterhelp :

% help :
:: :
    No effect; the command does nothing.  A zero exit code is returned.

Der Legende nach war dies vor langer Zeit, in den Anfängen des Internets, eine Möglichkeit, Text in Ihre Shell-Skripte einzufügen, der nicht ausgeführt wurde. Mit anderen Worten eine Art Kommentar. Ich habe keine schriftliche Quelle dafür.

verwandte Informationen