Яка різниця між оболонкою, ешеллом і терміном у Emacs?


60

У Emacs я можу запустити оболонку, використовуючи наступні команди -

M-x term

M-x shell

M-x eshell

Яка різниця між цими трьома?

Відповіді:


61

shellє найстарішим із цих 3 варіантів. Він використовує Emacs comint-modeдля запуску нижньої оболонки (наприклад, bash). У цьому режимі ви використовуєте Emacs для редагування командного рядка. Підпроцес не бачить жодного входу, поки ви не натиснете Enter. Emacs діє як німий термінал. Він підтримує кольорові коди, але не такі речі, як переміщення курсору, тому ви не можете запускати програми на основі прокльонів.

term- це емулятор терміналу, написаний на Emacs Lisp. У цьому режимі клавіші, які ви натискаєте, надсилаються безпосередньо до підпроцесу; ви використовуєте будь-які можливості редагування рядків, представлені оболонкою, а не Emacs. Він також дозволяє запускати програми, які використовують розширені можливості терміналу, такі як переміщення курсору (наприклад, ви можете запускати Emacs nanoабо lessвсередині нього).

eshellце оболонка, реалізована безпосередньо в Emacs Lisp. Ви не використовуєте bashабо будь-яку іншу оболонку як підпроцес. В результаті синтаксис не зовсім такий, як bashабо sh. Це дозволяє такі речі, як перенаправлення виводу процесу безпосередньо в буфер Emacs (спробуйте echo hello >#<buffer results>).


19

Згідно сторінки Xahlee :

shell є стандартним інтерфейсом emacs для інтерфейсу командного рядка Операційної системи.

term(ansi-term - це майже однаковий термін сьогодні. Вони були різними пакунками, але тепер обидва визначені в term.el) - це емулятор терміналу. Він поводиться як спеціальний додаток для терміналів, наприклад {xterm, gnome-terminal, puTTY}. Він сумісний з більш додатками оболонок, ніж інтерфейс оболонки emacs, але стандартні клавіші emacs, такі як рухомий курсор, тут не працюють (тому що це емуляція терміналу.)

eshellоболонка, повністю написана на emacs lisp. Примітка: це не емулятор bash. Ешелл - сама оболонка, але схожа на баш або інші снаряди.

Який слід використовувати?

Це залежить від ваших уподобань.

shell добре підходить для загального використання класичних / стандартних команд оболонки unix, таких як {grep, du, ls, сортування, кішка, голова, хвіст, unme,…}.

term & ansi-term хороші, якщо ви хочете запускати такі речі, як ssh чи інший інтерактивний інтерфейс командного рядка (наприклад, {python, ruby, lisp} shell) або текстовий графічний додаток, наприклад {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в eshll говориться, що "eshell / grep - це" скомпільована функція Lisp в `em- unix.el ', тому що grep у вашій системі може бути виконаний у eshell, як я вже сказав, що eshell дуже корисний у MS, де багато невеликих інструментів, таких як grep, не встановлено.
CodyChan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.