เชลล์, eshell และเทอมใน Emacs แตกต่างกันอย่างไร?


60

ใน Emacs ฉันสามารถเรียกใช้เชลล์โดยใช้คำสั่งต่อไปนี้ -

M-x term

M-x shell

M-x eshell

ความแตกต่างระหว่างสามสิ่งนี้คืออะไร?

คำตอบ:


61

shellเป็นตัวเลือกที่เก่าแก่ที่สุด 3 ตัวเลือก มันใช้ Emacs comint-modeเพื่อเรียกใช้ subshell (เช่นbash) ในโหมดนี้คุณกำลังใช้ Emacs เพื่อแก้ไขบรรทัดคำสั่ง กระบวนการย่อยไม่เห็นอินพุตใด ๆ จนกว่าคุณจะกด Enter Emacs ทำตัวเหมือนเทอร์มินัลโง่ มันสนับสนุนรหัสสี แต่ไม่ใช่สิ่งที่ต้องการย้ายเคอร์เซอร์ไปมาดังนั้นคุณจึงไม่สามารถเรียกใช้แอปพลิเคชันที่ใช้คำสาปได้

termเป็นเทอร์มินัลอีมูเลเตอร์ที่เขียนด้วย Emacs Lisp ในโหมดนี้ปุ่มที่คุณกดจะถูกส่งโดยตรงไปยังกระบวนการย่อย คุณกำลังใช้ความสามารถในการแก้ไขบรรทัดที่เชลล์นำเสนอไม่ใช่ของ Emacs นอกจากนี้ยังช่วยให้คุณเรียกใช้โปรแกรมที่ใช้ความสามารถของเทอร์มินัลขั้นสูงเช่นการเคลื่อนไหวของเคอร์เซอร์ (เช่นคุณสามารถเรียกใช้nanoหรือlessภายใน Emacs)

eshellเป็นเปลือกที่นำมาใช้โดยตรงใน Emacs Lisp คุณไม่ได้ทำงานbashหรือเชลล์อื่น ๆ เป็น subprocess เป็นผลให้ไวยากรณ์ไม่มากเช่นเดียวกับหรือbash shมันช่วยให้สิ่งต่าง ๆ เช่นการเปลี่ยนเส้นทางการส่งออกของกระบวนการโดยตรงกับ Emacs buffer (ลองecho hello >#<buffer results>)


19

ตามหน้า Xahlee :

shell เป็นอินเตอร์เฟส emacs มาตรฐานไปยังอินเตอร์เฟสบรรทัดคำสั่งของระบบปฏิบัติการ

term(ansi-term ค่อนข้างจะเหมือนกับเทอมในวันนี้พวกมันต่างกันในแพ็คเกจ แต่ตอนนี้ทั้งคู่ถูกกำหนดใน term.el) เป็นเทอร์มินัลอีมูเลเตอร์ มันทำงานเหมือนแอปเทอร์มินัลเฉพาะเช่น {xterm, gnome-terminal, puTTY} มันเข้ากันได้กับแอพ shell มากกว่า emacs interface interface แต่ปุ่ม emacs มาตรฐานเช่นเคอร์เซอร์ที่เคลื่อนไหวไม่ทำงานที่นี่ (เพราะมันเป็นแบบเทอร์มินัล)

eshellเป็นเปลือกที่เขียนทั้งหมดใน emacs lisp หมายเหตุ: มันไม่ใช่ bash emulator Eshell เป็นเชลล์ด้วยตัวเอง แต่คล้ายกับ bash หรือ shell อื่น ๆ

คุณควรใช้แบบไหน

มันขึ้นอยู่กับความต้องการของคุณ

shell ดีสำหรับการใช้งานทั่วไปของคำสั่งเชลล์ unix แบบคลาสสิค / มาตรฐานเช่น {grep, du, ls, sort, cat, head, tail, uname, …}

term & ansi-term เป็นสิ่งที่ดีถ้าคุณต้องการเรียกใช้สิ่งต่าง ๆ เช่น ssh หรืออินเตอร์เฟสแบบโต้ตอบบรรทัดคำสั่งอื่น ๆ (เช่น {python, ruby, lisp} shell) หรือแอป GUI แบบข้อความเช่น {vim, synaptic, ... }

eshell เป็นสิ่งที่ดีโดยเฉพาะอย่างยิ่งใน Microsoft Windows ที่ไม่ได้ติดตั้ง bash หรือถ้าคุณเป็นโปรแกรมเมอร์ emacs lisp เพราะ eshell สามารถเข้าถึง emacs lisp ได้โดยตรง


คำสั่งทั้งหมดที่คุณกล่าวถึง (grep, du, ls, ฯลฯ ) เป็นโปรแกรมและคำสั่งที่สร้างขึ้นในเชลล์ eshellจะมีไว้ด้วยหากคุณติดตั้งโปรแกรมเหล่านั้น
Bart Louwers

1
@Bart พยายามลบ grep ของคุณในระบบของคุณและทำการดำเนินการ grep ใน eshell คุณจะพบว่า grep ใน eshell ไม่ได้เป็น grep ในระบบของคุณwhich grepใน eshell พูดว่า "eshell / grep เป็น" ฟังก์ชั่น Lisp ที่คอมไพล์ใน `em- unix.el 'ซึ่งเป็นสาเหตุให้ grep ในระบบของคุณสามารถทำงานได้ใน eshell อย่างที่ฉันบอกว่า eshell มีประโยชน์มากใน MS ซึ่งเครื่องมือขนาดเล็กจำนวนมากเช่น grep ไม่ได้ติดตั้ง
CodyChan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.