ใน Emacs ฉันสามารถเรียกใช้เชลล์โดยใช้คำสั่งต่อไปนี้ -
M-x term
M-x shell
M-x eshell
ความแตกต่างระหว่างสามสิ่งนี้คืออะไร?
ใน Emacs ฉันสามารถเรียกใช้เชลล์โดยใช้คำสั่งต่อไปนี้ -
M-x term
M-x shell
M-x eshell
ความแตกต่างระหว่างสามสิ่งนี้คืออะไร?
คำตอบ:
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>
)
ตามหน้า 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 ได้โดยตรง
which grep
ใน eshell พูดว่า "eshell / grep เป็น" ฟังก์ชั่น Lisp ที่คอมไพล์ใน `em- unix.el 'ซึ่งเป็นสาเหตุให้ grep ในระบบของคุณสามารถทำงานได้ใน eshell อย่างที่ฉันบอกว่า eshell มีประโยชน์มากใน MS ซึ่งเครื่องมือขนาดเล็กจำนวนมากเช่น grep ไม่ได้ติดตั้ง
eshell
จะมีไว้ด้วยหากคุณติดตั้งโปรแกรมเหล่านั้น