Warum erzeugt der Befehl „xterm xterm“ eine unendliche Rekursion?

31

Ich verwende Ubuntu 14.04 (64 Bit). Als ich das erste Mal von dem Befehl erfahren habe xterm, habe ich ihn ausprobiert xterm xtermund es wurden unendlich viele neue xterm-Fenster geöffnet.
ctrl + Cstoppt es sofort und schließt alle Fenster.

Aber ich wollte sehen, wie weit es geht und es laufen lassen, so lange es geht. Es hat fast den gesamten Arbeitsspeicher aufgezehrt und wurde schließlich geschlossen (glaube ich, vom System selbst).

Also nur aus Neugier, warum / wie passiert das?

AhnungslosNein
quelle
3
Off-Topic: Es wurde geschlossen, weil es wahrscheinlich zu viel Speicher verbraucht und vom OOM-Killer (Out-of-Memory) getötet wurde.
Léo Lam
5
Dies sollte durch die Version 301 behoben werden : "setze SHELLUmgebungsvariable nur auf Programme, die sich in befinden /etc/shells(durch Patch / Report von Al Poole veranlasst)". (Die Antworten erklären, was mit der SHELLUmgebungsvariablen passiert).
Cristian Ciupitu
@CristianCiupitu - +1 - Ich habe gerade die Version 308 installiert - und anstatt wiederkehrende Terminals zu öffnen, wird ein leeres und ein zweites mit bash geöffnet (das zweite ist vermutlich die 'Shell' des ersten xterm.
Wilf

Antworten:

26

Ich schätze, das liegt daran, dass der erste Parameter, den Sie angeben, xtermdie zu verwendende Shell ist - xterm bash(oder xterm /bin/bash) xterm pythonusw.

Also läuft es xterm, versucht xtermals Shell zu starten , die eine andere xtermals die eine Shell startet , dann noch eine und noch eine ...

Sie können wahrscheinlich ein bisschen mehr dazu finden, indem Sie laufen man xterm

Wilf
quelle
24
Ja. Das erste xtermsetzt $SHELLauf ein xtermanderes und startet es xtermals seine Shell. Der andere xtermbenutzt den Befehl $SHELLals Shell und startet damit einen anderen xterm, ...
Florian Diesch
6
Dieser Teil der Antwort ist nicht klar: "was einen anderen xtermals diese eine Muschel startet ". Warum passiert das? Vielen Dank an @FlorianDiesch für die Erklärung dieses Teils.
John Kugelman unterstützt Monica am
@JohnKugelman - der erste xtermstartet den zweiten xtermals seine Muschel, der zweite xtermstartet den dritten xtermals seine Muschel, der dritte startet den vierten als seine Muschel ... etc
Wilf
3
Ich verstehe, warum das erste xtermdas zweite beginnt xterm: Es liegt daran, dass Sie getippt haben xterm xterm. Aber warum fängt der Zweite xtermden Dritten an xterm? Sie haben nicht getippt xterm xterm xterm, weshalb der dritte xtermbeginnt , ist nicht klar . Florians Kommentar erklärt warum.
John Kugelman unterstützt Monica am
1
Also nur aus Neugier ist es auch möglich mit gnome-terminal?
TuKsn
16

Kurzversion: Das Argument von xterm ist die Shell, die von xterm ausgeführt werden soll. Die Shell ist in der Umgebungsvariable gesetzt, daher führen weitere Aufrufe eine 10 PRINT "xterm" 20 GOTO 10Rekursion durch.

Lange Version:

  1. xterm xtermÜbergabe xterman den xterm-Aufruf als xterm-Shell durch Setzen der $SHELLVariablen auf xterm(1. Parameter von xterm wird als auszuführende Shell interpretiert)
  2. Dann führt xterm, das von Ihrem xterm xtermBefehl ausgeführt wird, den Befehl aus. $SHELLIn diesem Fall wird eine weitere xterm-Instanz erstellt (weil $SHELL=xtermjetzt).
  3. $SHELL=xterm bereits, so wird das neu erstellte xterm ausgeführt xterm
  4. gehe zu 3

Weitere Lektüre: man xterm

vaxquis
quelle