ทำไมคำสั่ง“ xterm xterm” จึงสร้างการสอบถามซ้ำแบบไม่สิ้นสุด


31

ฉันใช้ Ubuntu 14.04 (64 บิต) เมื่อแรกที่ฉันค้นพบเกี่ยวกับคำสั่งxtermฉันลองใช้คำสั่งxterm xtermและมันก็เริ่มเปิด xterm windows ใหม่ไม่สิ้นสุด
ctrl + Cหยุดทันทีและปิดหน้าต่างทั้งหมด

แต่ฉันต้องการที่จะเห็นว่ามันไปได้ไกลแค่ไหนและปล่อยให้มันวิ่งไปนานเท่าที่จะทำได้ มันกินแรมเกือบทั้งหมดและในที่สุดก็ถูกปิด (ฉันคิดว่าโดยระบบเอง)

ดังนั้นจากความอยากรู้ทำไมมันเกิดขึ้นได้อย่างไร?


3
ปิดหัวข้อ: ปิดเนื่องจากอาจใช้หน่วยความจำมากเกินไปและถูกฆ่าโดย OOM (หน่วยความจำไม่เพียงพอ)
Léo Lam

5
สิ่งนี้ควรได้รับการแก้ไขด้วยเวอร์ชัน 301 : "ตั้งค่าSHELLตัวแปรสภาพแวดล้อมให้กับโปรแกรมที่พบในเท่านั้น/etc/shells(ได้รับแจ้งจากโปรแกรมแก้ไข / รายงานโดย Al Poole)" (คำตอบอธิบายสิ่งที่มีSHELLตัวแปรสภาพแวดล้อม)
Cristian Ciupitu

@CristianCiupitu - +1 - ฉันเพิ่งติดตั้งรุ่น 308 - และแทนที่จะเปิดเทอร์มินัลซ้ำมันจะเปิดขึ้นมาหนึ่งอันและอีกอันหนึ่งที่มีการทุบตี (อันที่สองน่าจะเป็น 'เชลล์' ของ xterm แรก
Wilf

คำตอบ:


26

ฉัน (เดา) นี่เป็นเพราะพารามิเตอร์แรกที่คุณให้xtermคือเชลล์ที่ใช้ - xterm bash(หรือxterm /bin/bash) xterm pythonเป็นต้น

ดังนั้นมันจะทำงานxtermพยายามที่จะเริ่มต้นxtermเป็นเชลล์ซึ่งเริ่มต้นอีกxtermเชลล์หนึ่งจากนั้นเป็นอีกเชลล์หนึ่งและอีก ...

คุณอาจพบสิ่งนี้เพิ่มขึ้นอีกเล็กน้อยโดยการวิ่ง man xterm


24
ใช่. xtermชุดแรก$SHELLเป็นxtermและเริ่มต้นอื่นxtermเป็นเปลือกของมัน คนอื่นxtermใช้คำสั่งใน$SHELLขณะที่มันเป็นเชลล์จึงเริ่มต้นxtermใหม่ ...
Florian Diesch

6
คำตอบส่วนนี้ยังไม่ชัดเจน: "ซึ่งเริ่มต้นอีกคำxtermว่าเชลล์" ทำไมถึงเกิดขึ้น? ขอบคุณ @FlorianDiesch สำหรับการอธิบายส่วนนั้น
John Kugelman สนับสนุนโมนิกา

@JohnKugelman - คนที่หนึ่งxtermเริ่มต้นที่สองxtermเป็นเปลือกหอยที่สองxtermเริ่มที่สามxtermเป็นเปลือกหอยที่สามเริ่มต้นที่สี่เป็นเปลือกของมัน ... ฯลฯ
วิลฟ์

3
ฉันได้รับทำไมคนแรกที่xtermจะเริ่มต้นที่สองxterm: xterm xtermมันเป็นเพราะคุณพิมพ์ แต่ทำไมวินาทีที่สองxtermถึงสามxterm? คุณไม่ได้พิมพ์xterm xterm xtermดังนั้นจึงไม่ชัดเจนว่าทำไมการxtermเริ่มต้นที่สาม ความคิดเห็นของ Florian อธิบายว่าทำไม
John Kugelman สนับสนุน Monica

1
ดังนั้นจากความอยากรู้ก็เป็นไปได้ด้วยgnome-terminalหรือไม่
TuKsn

16

เวอร์ชั่นย่อ: อาร์กิวเมนต์ของ xterm คือเชลล์ที่จะดำเนินการโดย xterm; shell ถูกตั้งค่าใน 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. ข้ามไป 3

อ่านเพิ่มเติม: man xterm

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.