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?
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:
shell
jest najstarszym z tych 3 wyborów. Używa Emacsa comint-mode
do 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.
term
to 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ć nano
lub less
wewnątrz Emacsa).
eshell
jest powłoką zaimplementowaną bezpośrednio w Emacs Lisp. Nie działasz bash
ani żadna inna powłoka jako podproces. W rezultacie składnia nie jest dokładnie taka sama jak bash
lub sh
. Umożliwia takie rzeczy, jak przekierowanie wyjścia procesu bezpośrednio do bufora Emacsa (try echo hello >#<buffer results>
).
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).
eshell
jest 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.
which grep
w 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.
eshell
też je będą mieć, jeśli masz zainstalowane te programy.