Quelle est la difference entre shell, eshell et term dans Emacs?

61

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?

Kshitiz Sharma
la source

Réponses:

61

shellest le plus ancien de ces 3 choix. Il utilise Emacs comint-modepour 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.

termest 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 nanoou à l’ lessintérieur d’Emacs).

eshellest un shell implémenté directement dans Emacs Lisp. Vous n'exécutez bashni aucun autre shell en tant que sous-processus. Par conséquent, la syntaxe n'est pas tout à fait la même chose que bashou sh. Cela permet par exemple de rediriger la sortie d'un processus directement vers un tampon Emacs (try echo hello >#<buffer results>).

cjm
la source
19

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).

eshellest 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.

CodyChan
la source
Toutes les commandes que vous avez mentionnées (grep, du, ls, etc.) sont des programmes et des commandes construits dans le shell. eshellles aura aussi si vous avez ces programmes installés.
Bart Louwers
1
@Bart essaie de supprimer votre grep de votre système et effectuez l'action grep dans eshell. Vous constaterez que le grep dans eshell n'est pas grep dans votre système. which grepDans 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.
CodyChan