Jaka jest różnica między powłoką, eshellem i terminem w Emacsie?


60

W Emacsie mogę uruchomić powłokę używając następujących poleceń -

M-x term

M-x shell

M-x eshell

Jaka jest różnica między tymi trzema?

Odpowiedzi:


61

shelljest najstarszym z tych 3 wyborów. Używa Emacsa comint-modedo uruchomienia podpowłoki (np bash.). W tym trybie używasz Emacsa do edycji wiersza poleceń. Podproces nie widzi żadnych danych wejściowych, dopóki nie naciśniesz Enter. Emacs zachowuje się jak głupi terminal. Obsługuje kody kolorów, ale nie porusza kursorem, więc nie można uruchamiać aplikacji opartych na klątwach.

termto emulator terminala napisany w Emacs Lisp. W tym trybie naciskane klawisze są wysyłane bezpośrednio do podprocesu; używasz wszelkich możliwości edycji linii, jakie oferuje powłoka, a nie Emacsa. Pozwala także na uruchamianie programów korzystających z zaawansowanych funkcji terminalu, takich jak ruch kursora (np. Możesz uruchomić nanolub lesswewnątrz Emacsa).

eshelljest powłoką zaimplementowaną bezpośrednio w Emacs Lisp. Nie działasz bashani żadna inna powłoka jako podproces. W rezultacie składnia nie jest dokładnie taka sama jak bashlub sh. Umożliwia takie rzeczy, jak przekierowanie wyjścia procesu bezpośrednio do bufora Emacsa (try echo hello >#<buffer results>).


19

Według strony Xahlee :

shell jest standardowym interfejsem emacs do interfejsu wiersza poleceń systemu operacyjnego.

term(ansi-term jest dziś prawie taki sam jak termin. Były to różne pakiety, ale teraz oba zdefiniowane w term.el) to emulator terminala. Zachowuje się jak dedykowana aplikacja terminalowa, taka jak {xterm, gnome-terminal, puTTY}. Jest kompatybilny z większą liczbą aplikacji powłoki niż interfejs powłoki emacsa, ale standardowe klawisze emacsa, takie jak poruszanie kursorem, nie działają tutaj (ponieważ emuluje terminal).

eshelljest powłoką napisaną całkowicie w emacs lisp. Uwaga: nie jest to emulator bash. Eshell sam w sobie jest powłoką, ale podobny do powłoki bash lub innych powłok.

Którego powinieneś użyć?

To zależy od twoich preferencji.

shell jest dobry do ogólnego użycia klasycznych / standardowych poleceń powłoki unix, takich jak {grep, du, ls, sort, cat, head, tail, uname,…}.

term & ansi-term są dobre, jeśli chcesz uruchamiać takie rzeczy jak ssh lub inny interaktywny interfejs wiersza poleceń (taki jak powłoka {python, ruby, lisp}) lub tekstową aplikację GUI, taką jak {vim, synaptic,…}.

eshell jest dobry, szczególnie w systemie Microsoft Windows, w którym bash nie jest zainstalowany lub, jeśli jesteś programistą emacs lisp, ponieważ eshell ma bezpośredni dostęp do emacs lisp.


Wszystkie wymienione polecenia (grep, du, ls itp.) Są programami i poleceniami wbudowanymi w powłokę. eshellteż je będą mieć, jeśli masz zainstalowane te programy.
Bart Louwers

1
@ Bart próbuje usunąć swój grep w systemie i wykonać akcję grep w eshell, przekonasz się, że grep w eshell nie jest grep w twoim systemie, which grepw eshll mówi „eshell / grep to” skompilowana funkcja Lisp w `em- unix.el ', ponieważ grep w twoim systemie może być wykonywany w eshell, tak jak powiedziałem, eshell jest bardzo przydatny w MS, w którym wiele małych narzędzi takich jak grep nie jest zainstalowanych.
CodyChan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.