web-dev-qa-db-ja.com

コマンド "xterm xterm"が無限再帰を作成するのはなぜですか?

Ubuntu 14.04(64ビット)を実行しています。コマンドxtermを初めて見つけたとき、コマンドxterm xtermを試してみたところ、無限に新しいxtermウィンドウが開き始めました。
ctrl + Cはすぐに停止し、すべてのウィンドウを閉じます。

しかし、私はそれがどこまで進んでいるかを確認し、可能な限り実行したかったのです。ほぼすべてのRAMを使い果たし、最終的には閉じられました(システム自体が考えています)。

好奇心から、なぜ/どのようにこれが起こるのですか?

31
CluelessNoob

これは、xtermに最初に与えるパラメーターが、使用する Shell であるためです-xterm bash(またはxterm /bin/bash)、xterm pythonなど。

したがって、xtermを実行し、xtermをシェルとして起動しようとします。これにより、別のxtermがそのシェルとして、次に別の、そして別の...

man xterm を実行することで、これについてもう少し見つけることができます。

26
Wilf

短いバージョン:xtermの引数は、xtermによって実行されるシェルです。シェルは環境変数に設定されているため、さらにコールすると10 PRINT "xterm" 20 GOTO 10再帰が実行されます。

ロングバージョン:

  1. xterm xtermは、$Shell変数をxtermに設定することにより、xtermのシェルとしてxtermをxterm呼び出しに渡します(xtermの最初のパラメーターは、実行するシェルとして解釈されます)
  2. 次に、xterm xtermコマンドによって実行されたxtermは$Shellを実行します-この場合、別のxtermインスタンスを作成します(現在$Shell=xtermであるため)
  3. $Shell=xtermはすでにあるため、新しく作成されたxtermはxtermを実行します
  4. 後藤3

さらに読む: man xterm

16
vaxquis