Sự khác biệt giữa shell, eshell và hạn trong Emacs là gì?


60

Trong Emacs tôi có thể chạy shell bằng các lệnh sau -

M-x term

M-x shell

M-x eshell

Sự khác biệt giữa ba là gì?

Câu trả lời:


61

shelllà lựa chọn lâu đời nhất trong số 3 sự lựa chọn này. Nó sử dụng Emacs comint-modeđể chạy một subshell (ví dụ bash). Trong chế độ này, bạn đang sử dụng Emacs để chỉnh sửa một dòng lệnh. Quá trình con không thấy bất kỳ đầu vào nào cho đến khi bạn nhấn Enter. Emacs đang hành động như một thiết bị đầu cuối câm. Nó không hỗ trợ mã màu, nhưng không phải là những thứ như di chuyển con trỏ xung quanh, vì vậy bạn không thể chạy các ứng dụng dựa trên lời nguyền.

termlà một trình giả lập thiết bị đầu cuối được viết bằng Emacs Lisp. Trong chế độ này, các phím bạn nhấn được gửi trực tiếp đến quy trình con; bạn đang sử dụng bất kỳ khả năng chỉnh sửa dòng nào mà trình bày trình bày, không phải của Emacs. Nó cũng cho phép bạn chạy các chương trình sử dụng các khả năng của thiết bị đầu cuối tiên tiến như di chuyển con trỏ (ví dụ: bạn có thể chạy nanohoặc lessbên trong Emacs).

eshelllà một shell được thực hiện trực tiếp trong Emacs Lisp. Bạn không chạy bashhoặc bất kỳ shell nào khác dưới dạng quy trình con. Kết quả là, cú pháp không hoàn toàn giống như bashhoặc sh. Nó cho phép những thứ như chuyển hướng đầu ra của một quá trình trực tiếp đến bộ đệm Emacs (thử echo hello >#<buffer results>).


19

Theo trang Xahlee :

shell là giao diện emacs tiêu chuẩn cho giao diện dòng lệnh của Hệ điều hành.

term(thuật ngữ ansi khá giống với thuật ngữ ngày nay. Chúng là các gói khác nhau, nhưng hiện tại cả hai đều được định nghĩa trong term.el) là một trình giả lập đầu cuối. Nó hoạt động như một ứng dụng thiết bị đầu cuối chuyên dụng, chẳng hạn như {xterm, gnome-terminal, puTTY}. Nó tương thích với nhiều ứng dụng shell hơn giao diện shell của emacs, nhưng các phím emacs tiêu chuẩn như con trỏ di chuyển không hoạt động ở đây (vì nó đang mô phỏng một thiết bị đầu cuối.)

eshelllà một vỏ được viết hoàn toàn bằng emacs lisp. Lưu ý: nó không phải là trình giả lập bash. Eshell là một shell của chính nó, nhưng tương tự như bash hoặc các shell khác.

Bạn nên sử dụng loại nào?

Nó phụ thuộc vào sở thích của bạn.

shell tốt cho việc sử dụng chung các lệnh shell unix cổ điển / tiêu chuẩn, chẳng hạn như {grep, du, ls, sort, cat, head, tail, uname, Tiết}.

term & ansi-term là tốt nếu bạn muốn chạy các công cụ như ssh hoặc giao diện tương tác dòng lệnh khác (như {python, ruby, lisp} shell) hoặc ứng dụng GUI dựa trên văn bản như {vim, synaptic, đấm}.

eshell đặc biệt tốt trên Microsoft Windows, nơi bash không được cài đặt, hoặc, nếu bạn là một lập trình viên không thể thiếu, bởi vì eshell có quyền truy cập trực tiếp vào lac lisp.


Tất cả các lệnh bạn đã đề cập (grep, du, ls, v.v.) là các chương trình và lệnh được xây dựng trong trình bao. eshellcũng sẽ có chúng nếu bạn cài đặt các chương trình đó.
Bart Louwers

1
@Bart hãy thử xóa grep của bạn trong hệ thống của bạn và thực hiện hành động grep trong eshell, bạn sẽ thấy rằng grep trong eshell không phải là grep trong hệ thống của bạn, which greptrong eshll nói "eshell / grep là một" chức năng Lisp được biên dịch trong `em- unix.el ', vì grep trong hệ thống của bạn có thể được thực thi trong eshell, như tôi đã nói eshell rất hữu ích trong MS mà rất nhiều công cụ nhỏ như grep chưa được cài đặt.
CodyChan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.