Por que o comando "xterm xterm" cria uma recursão infinita?

31

Estou executando o Ubuntu 14.04 (64 bits). Quando descobri o comando xterm, tentei o comando xterm xterme ele começou a abrir infinitamente novas janelas xterm.
ctrl + Cpára imediatamente e fecha todas as janelas.

Mas eu queria ver até onde ele vai e deixá-lo correr o máximo possível. Ele consumiu quase toda a RAM e acabou sendo fechado (acho que pelo próprio sistema).

Então, só por curiosidade, por que / como isso acontece?

CluelessNoob
fonte
3
Fora do tópico: foi fechado porque provavelmente usava muita memória e foi morto pelo assassino do OOM (falta de memória).
Léo Lam
5
Isso deve ser corrigido pela versão 301 : "somente defina SHELLa variável de ambiente para os programas encontrados em /etc/shells(solicitado pelo patch / relatório de Al Poole)". (As respostas explicam o que há com a SHELLvariável de ambiente).
Cristian Ciupitu
@CristianCiupitu - +1 - Acabei de instalar a versão 308 - e, em vez de abrir terminais recorrentes, abre um em branco e um segundo com bash (o segundo provavelmente é o 'shell' do primeiro xterm.
Wilf

Respostas:

26

Eu acho que isso ocorre porque o primeiro parâmetro que você fornece xtermé o shell a ser usado - xterm bash(ou xterm /bin/bash), xterm pythonetc.

Então ele roda xterm, tenta começar xtermcomo um shell, que inicia outro xtermcomo aquele shell, depois outro e outro ...

Você provavelmente pode encontrar um pouco mais sobre isso executando man xterm

Wilf
fonte
24
Sim. Os primeiros xtermconjuntos $SHELLpara xterme inicia outro xtermcomo seu shell. Esse outro xtermusa o comando $SHELL, pois é shell, iniciando assim outro xterm...
Florian Diesch
6
Esta parte da resposta não é clara: "que inicia outra xtermcomo essa". Por que isso acontece? Obrigado @FlorianDiesch por explicar essa parte.
John Kugelman apoia Monica
@JohnKugelman - os primeiros xtermcomeça a segunda xtermcomo sua concha, o segundo xtermcomeça a terceira xtermcomo sua concha, o terceiro inicia o quarto como seu shell ... etc
Wilf
3
Entendo por que o primeiro xtermcomeça o segundo xterm: é porque você digitou xterm xterm. Mas por que o segundo xtermcomeça o terceiro xterm? Você não digitou xterm xterm xterm, por isso não é óbvio por que o terceiro xtermcomeça. O comentário de Florian explica o porquê.
John Kugelman apoia Monica
1
Então, por curiosidade, também é possível com gnome-terminal?
TuKsn
16

Versão curta: o argumento do xterm é o shell a ser executado pelo xterm; shell é definido no ambiente var, portanto, outras chamadas fazem uma 10 PRINT "xterm" 20 GOTO 10recursão.

Versão longa:

  1. xterm xtermpassa xtermpara a chamada xterm como shell do xterm, definindo a $SHELLvariável como xterm(o 1º parâmetro do xterm é interpretado como shell a ser executado)
  2. então, o xterm executado pelo seu xterm xtermcomando executa o $SHELL- nesse caso, criando outra instância do xterm (porque $SHELL=xtermagora)
  3. $SHELL=xterm já, então o xterm recém-criado executa xterm
  4. ir para 3

Leitura adicional: man xterm

vaxquis
fonte