Чому команда “xterm xterm” створює нескінченну рекурсію?


31

Я працюю на Ubuntu 14.04 (64 біт). Коли я вперше дізнався про команду xterm, я спробував команду xterm xterm, і вона почала нескінченно відкривати нові вікна xterm.
ctrl + Cзупиняє його негайно і закриває всі вікна.

Але я хотів побачити, як далеко йде, і нехай він біжить, поки може. Він з'їв майже всю ОЗУ і врешті-решт закрився (я думаю, що сама система).

Тож просто з цікавості, чому / як це відбувається?


3
Поза темою: це було закрито, тому що він, ймовірно, використовував занадто багато пам’яті та був убитий вбивцею OOM (поза пам'яттю).
Лео Лам

5
Це має бути зафіксовано версією 301 : "встановити лише SHELLзмінну середовища для програм, знайдених у /etc/shells(запит на патч / звіт від Al Poole)". (Відповіді пояснюють, що стосується SHELLзмінної середовища).
Крістіан Цюпіту

@ CristianCiupitu - +1 - Я щойно встановив версію 308 - і замість того, щоб відкривати повторювані термінали, він відкриває порожній, а другий - з bash (другий, мабуть, є "оболонкою" першого xterm.
Wilf July

Відповіді:


26

Я (здогадуюсь), це тому, що перший параметр, який ви надаєте, xterm- це оболонка для використання - xterm bash(або xterm /bin/bash) xterm pythonтощо.

Отже, він працює xterm, намагається запуститись xtermяк оболонка, яка починається ще xtermяк оболонка, то інша, так і інша ...

Напевно, ви можете знайти трохи більше про це, запустивши man xterm


24
Так. Перші xtermнабори $SHELLдо xtermі починається інше , xtermяк його оболонки. Цей інший xtermвикористовує команду в $SHELLякості оболонки, тим самим починаючи іншу xterm, ...
Флоріан Дієш,

6
Ця частина відповіді не зрозуміла: "яка починається ще xtermяк оболонка цих". Чому це відбувається? Дякуємо @FlorianDiesch за пояснення цієї частини.
Джон Кугельман підтримує Моніку

@JohnKugelman - перший xtermпочинає другий xtermяк його оболонка, другий xtermзапускає третій xtermяк його оболонка, третій починає четвертий як його оболонка ... тощо
Вілф

3
Я розумію, чому перший xtermпочинає другий xterm: це тому, що ви ввели xterm xterm. Але чому другий xtermпочинає третій xterm? Ви не ввели xterm xterm xterm, тому не очевидно, чому xtermпочинається третій . Коментар Флоріана пояснює, чому.
Джон Кугельман підтримує Моніку

1
Так що з цікавості це теж можливо gnome-terminal?
TuKsn

16

Коротка версія: аргумент xterm - це оболонка для виконання xterm; оболонка встановлена ​​в середовищі var, тому подальші дзвінки роблять 10 PRINT "xterm" 20 GOTO 10рекурсію.

Довга версія:

  1. xterm xtermпереходить xtermдо виклику xterm як оболонка xterm шляхом встановлення $SHELLзмінної до xterm(1-й параметр xterm інтерпретується як оболонка для виконання)
  2. тоді xterm, виконаний вашою xterm xtermкомандою, виконує $SHELL- у цьому випадку створюючи інший екземпляр xterm (тому що $SHELL=xtermзараз)
  3. $SHELL=xterm вже, так що новостворений xterm виконує xterm
  4. goto 3

Подальше читання: man xterm

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.