¿Por qué el comando "xterm xterm" crea una recursión infinita?

31

Estoy ejecutando Ubuntu 14.04 (64 bit). Cuando descubrí el comando por primera vez xterm, probé el comando xterm xtermy comenzó a abrir infinitamente nuevas ventanas xterm.
ctrl + Clo detiene de inmediato y cierra todas las ventanas.

Pero quería ver qué tan lejos llega y dejar que corra tanto como pueda. Se comió casi toda la RAM y finalmente se cerró (creo que por el propio sistema).

Entonces, solo por curiosidad, ¿por qué / cómo sucede esto?

Despistado
fuente
3
Fuera de tema: estaba cerrado porque probablemente usaba demasiada memoria y fue asesinado por el asesino OOM (sin memoria).
Léo Lam
55
Esto debería solucionarse con la versión 301 : "solo establece SHELLla variable de entorno en los programas que se encuentran en /etc/shells(solicitada por parche / informe de Al Poole)". (Las respuestas explican qué pasa con la SHELLvariable de entorno).
Cristian Ciupitu
@CristianCiupitu - +1 - Acabo de instalar la versión 308 - y en lugar de abrir terminales recurrentes, abre una en blanco, y una segunda con bash (la segunda presumiblemente es el 'shell' de la primera xterm.
Wilf

Respuestas:

26

Supongo que esto se debe a que el primer parámetro que le das xtermes el shell a usar - xterm bash(o xterm /bin/bash), xterm pythonetc.

Entonces se ejecuta xterm, intenta comenzar xtermcomo un shell, que inicia otro xtermcomo ese shell, luego otro y otro ...

Probablemente pueda encontrar un poco más sobre esto ejecutando man xterm

Wilf
fuente
24
Sí. Los primeros xtermconjuntos de $SHELLa xtermy comienza otro xtermcomo su cáscara. Ese otro xtermusa el comando $SHELLya que su shell inicia así otro xterm, ...
Florian Diesch
66
Esta parte de la respuesta no está clara: "lo que inicia otro xtermcomo ese shell". ¿Por qué pasa eso? Gracias @FlorianDiesch por explicar esa parte.
John Kugelman apoya a Monica el
@JohnKugelman - los primeros xterminicios del segundo xtermcomo su cáscara, el segundo xtermse inicia la tercera xtermcomo su cáscara, la tercera se inicia el cuarto como su cáscara, etc ...
Wilf
3
Entiendo por qué el primero xtermcomienza el segundo xterm: es porque escribiste xterm xterm. Pero, ¿por qué el segundo xtermcomienza el tercero xterm? No escribiste xterm xterm xterm, así que no es obvio por qué xtermcomienza la tercera . El comentario de Florian explica por qué.
John Kugelman apoya a Monica el
1
Entonces, ¿solo por curiosidad también es posible con gnome-terminal?
TuKsn
16

Versión corta: el argumento de xterm es el shell que ejecutará xterm; shell se establece en el entorno var, por lo que las llamadas posteriores hacen una 10 PRINT "xterm" 20 GOTO 10recursividad.

Versión larga:

  1. xterm xtermpasa xterma la llamada xterm como shell de xterm configurando la $SHELLvariable a xterm(el primer parámetro de xterm se interpreta como shell para ejecutar)
  2. luego, xterm ejecutado por su xterm xtermcomando ejecuta el $SHELL- en este caso, creando otra instancia de xterm (porque $SHELL=xtermahora)
  3. $SHELL=xterm ya, entonces el xterm recién creado se ejecuta xterm
  4. ir a 3

Otras lecturas: man xterm

vaxquis
fuente