Mengapa perintah “xterm xterm” membuat rekursi tak terbatas?

31

Saya menjalankan Ubuntu 14.04 (64 bit). Ketika saya pertama kali mengetahui tentang perintah tersebut xterm, saya mencoba perintah itu xterm xterm, dan itu mulai membuka jendela xterm baru tanpa batas.
ctrl + Csegera menghentikannya dan menutup semua jendela.

Tapi saya ingin melihat seberapa jauh dan membiarkannya berjalan selama mungkin. Ini memakan hampir semua RAM dan akhirnya ditutup (saya pikir oleh sistem itu sendiri).

Jadi hanya karena penasaran, mengapa / bagaimana ini terjadi?

CluelessNoob
sumber
3
Di luar topik: ditutup karena mungkin menggunakan terlalu banyak memori dan terbunuh oleh pembunuh OOM (kehabisan memori).
Léo Lam
5
Ini harus diperbaiki oleh versi 301 : "hanya set SHELLvariabel lingkungan ke program yang ditemukan /etc/shells(diminta oleh tambalan / laporan oleh Al Poole)". (Jawabannya menjelaskan ada apa dengan SHELLvariabel lingkungan).
Cristian Ciupitu
@CristianCiupitu - +1 - Saya baru saja menginstal versi 308 - dan alih-alih membuka terminal berulang, ini membuka yang kosong, dan yang kedua dengan bash (yang kedua mungkin menjadi 'shell' dari xterm pertama.
Wilf

Jawaban:

26

Saya (tebak) ini karena parameter pertama yang Anda berikan xtermadalah shell untuk menggunakan - xterm bash(atau xterm /bin/bash), xterm pythondll.

Jadi itu berjalan xterm, mencoba untuk memulai xtermsebagai shell, yang memulai yang lain xtermsebagai yang shell, lalu yang lain, dan yang lain ...

Anda mungkin dapat menemukan lebih banyak tentang ini dengan menjalankan man xterm

Wilf
sumber
24
Iya nih. Pertama xtermset $SHELLke xtermdan mulai lagi xtermsebagai cangkangnya. Yang lain xtermmenggunakan perintah $SHELLsebagai shell sehingga memulai yang lain xterm, ...
Florian Diesch
6
Bagian dari jawaban ini tidak jelas: "yang memulai yang lain xtermsebagai yang shell". Mengapa itu terjadi? Terima kasih @FlorianDiesch untuk menjelaskan bagian itu.
John Kugelman mendukung Monica
@JohnKugelman - yang pertama xtermmemulai yang kedua xtermsebagai cangkangnya, yang kedua xtermmulai yang ketiga xtermsebagai cangkangnya, yang ketiga mulai yang keempat sebagai cangkangnya ... dll
Wilf
3
Saya mengerti mengapa yang pertama xtermmemulai yang kedua xterm: itu karena Anda mengetik xterm xterm. Tetapi mengapa yang kedua xtermmemulai yang ketiga xterm? Anda tidak mengetik xterm xterm xterm, jadi tidak jelas mengapa yang ketiga xtermdimulai. Komentar Florian menjelaskan alasannya.
John Kugelman mendukung Monica
1
Jadi hanya karena penasaran, apakah mungkin juga dengan itu gnome-terminal?
TuKsn
16

Versi singkat: Argumen xterm adalah shell untuk dieksekusi oleh xterm; shell diatur dalam lingkungan var, jadi panggilan lebih lanjut melakukan 10 PRINT "xterm" 20 GOTO 10rekursi.

Versi panjang:

  1. xterm xtermberalih xtermke panggilan xterm sebagai shell xterm dengan mengatur $SHELLvariabel ke xterm(parameter pertama xterm diartikan sebagai shell yang akan dieksekusi)
  2. kemudian, xterm yang dieksekusi oleh xterm xtermperintah Anda mengeksekusi $SHELL- dalam kasus ini, membuat instance xterm lainnya (karena $SHELL=xtermsekarang)
  3. $SHELL=xterm sudah, jadi xterm yang baru dibuat dijalankan xterm
  4. kebagian 3

Bacaan lebih lanjut: man xterm

vaxquis
sumber