Dans Emacs, je peux exécuter un shell en utilisant les commandes suivantes -
M-x term
M-x shell
M-x eshell
Quelle est la différence entre ces trois?
shell
est le plus ancien de ces 3 choix. Il utilise Emacs comint-mode
pour exécuter un sous-shell (par exemple bash
). Dans ce mode, vous utilisez Emacs pour modifier une ligne de commande. Le sous-processus ne voit aucune entrée jusqu'à ce que vous appuyiez sur Entrée. Emacs agit comme un terminal stupide. Il prend en charge les codes de couleur, mais pas les opérations telles que le déplacement du curseur. Vous ne pouvez donc pas exécuter d'applications basées sur curses.
term
est un émulateur de terminal écrit en Emacs Lisp. Dans ce mode, les touches sur lesquelles vous appuyez sont envoyées directement au sous-processus; vous utilisez toutes les capacités d'édition de ligne que le shell présente, pas celles d'Emacs. Il vous permet également d’exécuter des programmes qui utilisent des fonctionnalités de terminal avancées telles que le déplacement du curseur (par exemple, vous pouvez exécuter nano
ou à l’ less
intérieur d’Emacs).
eshell
est un shell implémenté directement dans Emacs Lisp. Vous n'exécutez bash
ni aucun autre shell en tant que sous-processus. Par conséquent, la syntaxe n'est pas tout à fait la même chose que bash
ou sh
. Cela permet par exemple de rediriger la sortie d'un processus directement vers un tampon Emacs (try echo hello >#<buffer results>
).
Selon la page Xahlee :
shell
est l'interface standard emacs avec l'interface de ligne de commande du système d'exploitation.
term
(ansi-term est quasiment identique au terme actuel. Il s'agissait de packages différents, mais maintenant définis dans term.el) est un émulateur de terminal. Il se comporte comme une application de terminal dédiée, telle que {xterm, gnome-terminal, puTTY}. Il est compatible avec plus d'applications shell que l'interface shell emacs, mais les clés standard emacs telles que le déplacement du curseur ne fonctionnent pas ici (car elles émulent un terminal).
eshell
est un shell écrit entièrement en emacs lisp. Remarque: ce n'est pas un émulateur bash. Eshell est une coquille en soi, mais semblable à une coquille de bash ou autre.
Lequel devriez-vous utiliser?
Cela dépend de votre préférence.
shell
est bon pour une utilisation générale des commandes de shell unix classiques / standard, telles que {grep, du, ls, sort, chat, tête, queue, uname,…}.
term & ansi-term
sont utiles si vous voulez exécuter des choses comme ssh, ou une autre interface interactive en ligne de commande (telle que {python, ruby, lisp} shell), ou une application graphique à base de texte telle que {vim, synaptic,…}.
eshell
est bon surtout sur Microsoft Windows où bash n’est pas installé, ou, si vous êtes programmeur emacs lisp, eshell ayant un accès direct à emacs lisp.
eshell
les aura aussi si vous avez ces programmes installés.which grep
Dans eshll, il est indiqué que "eshell / grep est une" fonction Lisp compilée dans `em- unix.el ', car le grep de votre système peut être exécuté dans eshell, comme je le disais, eshell est très utile dans MS, de nombreux petits outils tels que grep ne sont pas installés.