In Emacs kann ich eine Shell mit folgenden Befehlen ausführen:
M-x term
M-x shell
M-x eshell
Was ist der Unterschied zwischen diesen drei?
shell
ist die älteste dieser 3 Möglichkeiten. Es benutzt Emacs comint-mode
um eine Subshell zu starten (zB bash
). In diesem Modus bearbeiten Sie mit Emacs eine Befehlszeile. Der Unterprozess sieht keine Eingabe, bis Sie die Eingabetaste drücken. Emacs verhält sich wie ein dummes Terminal. Es werden zwar Farbcodes unterstützt, aber keine Dinge wie das Bewegen des Cursors, sodass Sie keine Anwendungen ausführen können, die auf Flüchen basieren.
term
ist ein Terminalemulator, der in Emacs Lisp geschrieben wurde. In diesem Modus werden die von Ihnen gedrückten Tasten direkt an den Unterprozess gesendet. Sie verwenden die von der Shell angebotenen Funktionen zur Zeilenbearbeitung, nicht die von Emacs. Sie können damit auch Programme ausführen, die erweiterte Terminalfunktionen wie die Cursorbewegung verwenden (z. B. Sie könnten Emacs ausführen nano
oder less
in Emacs).
eshell
ist eine Shell, die direkt in Emacs Lisp implementiert ist. Sie führen keine bash
oder eine andere Shell als Unterprozess aus. Infolgedessen stimmt die Syntax nicht mit der von bash
oder überein sh
. Es ermöglicht Dinge wie die Umleitung der Ausgabe eines Prozesses direkt in einen Emacs-Puffer (try echo hello >#<buffer results>
).
Laut Xahlee-Seite :
shell
ist die Standard-Emacs-Schnittstelle zur Befehlszeilenschnittstelle des Betriebssystems.
term
(ansi-term ist heute ziemlich gleich zu term. Es waren verschiedene Pakete, aber jetzt sind beide in term.el definiert.) ist ein Terminal-Emulator. Es verhält sich wie eine dedizierte Terminal-App wie {xterm, gnome-terminal, puTTY}. Es ist mit mehr Shell-Apps als der Emacs-Shell-Oberfläche kompatibel, aber Standard-Emacs-Tasten wie das Bewegen des Cursors funktionieren hier nicht (weil es ein Terminal emuliert).
eshell
ist eine Shell, die komplett in Emacs Lisp geschrieben ist. Hinweis: Es ist kein Bash-Emulator. Eshell ist eine Muschel für sich, aber ähnlich wie Bash oder andere Muscheln.
Welches solltest du verwenden?
Es hängt von Ihrer Präferenz ab.
shell
eignet sich für die allgemeine Verwendung von klassischen / standardmäßigen Unix-Shell-Befehlen wie {grep, du, ls, sort, cat, head, tail, uname,…}.
term & ansi-term
sind gut, wenn Sie Dinge wie ssh oder eine andere interaktive Befehlszeilenschnittstelle (wie {python, ruby, lisp} shell) oder eine textbasierte GUI-App wie {vim, synaptic,…} ausführen möchten.
eshell
ist besonders unter Microsoft Windows gut, wo bash nicht installiert ist, oder wenn Sie ein Emacs Lisp-Programmierer sind, weil eshell direkten Zugriff auf Emacs Lisp hat.
eshell
werden sie auch haben, wenn Sie diese Programme installiert haben.which grep
In eshll wird "eshell / grep ist eine" kompilierte Lisp-Funktion in unix.el ', natürlich kann das grep in deinem System in eshell ausgeführt werden, wie ich schon sagte, eshell ist sehr nützlich in MS, wo viele kleine Tools wie grep nicht installiert sind.