Was macht yes $ (yes yes)?


23

yesIch fragte mich, was der Befehl wohl nützen könnte, stolperte über diesen Kommentar und versuchte, ihn auszuführen

yes $(yes yes)

Soweit ich yesweiß , sollte dies einfach eine unendliche Folge von ausgeben , aber stattdessen wird nichts ausgegeben und mein Grafikterminal stürzt nach einigen Sekunden ab. (Wenn ich es auf tty1 ausführe, sehe ich nach einiger Zeit die Anmeldeaufforderung.)

Was passiert hier?


2
Ich bin kein Experte, aber es könnte sein, dass der erste Aufruf versucht, unendlich viele Male zu drucken. (Oder das Argument kann einfach zu lang sein.)
Strugee

5
@strugee Die Argumentliste wird nie aufgefüllt, da yesnie zurückgegeben.
Chris Down

@strugee Sie können "unendlich unendliche Zeiten" mit xargs: yes yes | xargs -P 0 yes(oder ohne -P 0für Single-Process Infinity)
Kyle Strand

Antworten:


25

Zum Laufen sollte es schon reichen

 echo $(yes yes)

Der $(...)führt den inneren Befehl aus, bis er beendet ist, und erfasst alle seine Ausgaben. - Da yesBash nun eine lange Zeit läuft und eine Menge Output erzeugt, wird es irgendwann keinen Speicher mehr geben und abstürzen.


6

Um die Meldung für den Fehler anzuzeigen, durch den Ihre Shell geschlossen wird, müssen Sie eine Sub-Shell ausführen.

$ sh
$ kill -9 $$
Killed
$

$ sh
$ yes $(yes yes)
sh: xrealloc: cannot allocate 18446744071562067968 bytes
$

1
16 Millionen Gigabyte, was? Gordon Moore lauert in einer Ecke gehen : „Nun ... ich meine, nicht ganz noch ...“
Ferd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.