In Emacs posso eseguire una shell usando i seguenti comandi:
M-x term
M-x shell
M-x eshell
Qual è la differenza tra questi tre?
In Emacs posso eseguire una shell usando i seguenti comandi:
M-x term
M-x shell
M-x eshell
Qual è la differenza tra questi tre?
Risposte:
shell
è la più antica di queste 3 scelte. Usa Emacs comint-mode
per eseguire una subshell (ad es bash
.). In questa modalità, stai usando Emacs per modificare una riga di comando. Il sottoprocesso non vede alcun input finché non si preme Invio. Emacs si comporta come un terminale stupido. Supporta i codici colore, ma non cose come spostare il cursore, quindi non è possibile eseguire applicazioni basate su maledizioni.
term
è un emulatore di terminale scritto in Emacs Lisp. In questa modalità, i tasti premuti vengono inviati direttamente al sottoprocesso; stai usando le funzionalità di modifica delle linee presentate dalla shell, non quelle di Emacs. Inoltre, consente di eseguire programmi che utilizzano funzionalità terminali avanzate come il movimento del cursore (ad esempio, è possibile eseguire nano
o less
all'interno di Emacs).
eshell
è una shell implementata direttamente in Emacs Lisp. Non stai eseguendo bash
o qualsiasi altra shell come sottoprocesso. Di conseguenza, la sintassi non è esattamente la stessa di bash
o sh
. Permette cose come il reindirizzamento dell'output di un processo direttamente su un buffer Emacs (provare echo hello >#<buffer results>
).
Secondo la pagina Xahlee :
shell
è l'interfaccia standard di emacs all'interfaccia della riga di comando del sistema operativo.
term
(ansi-term è praticamente lo stesso di oggi. Erano pacchetti diversi, ma ora entrambi definiti in term.el) è un emulatore di terminale. Si comporta come un'app terminale dedicata, come {xterm, gnome-terminal, puTTY}. È compatibile con più app di shell dell'interfaccia di emacs shell, ma i tasti standard di emacs come il cursore mobile non funzionano qui (perché emulano un terminale).
eshell
è una shell scritta interamente in emacs lisp. Nota: non è un emulatore bash. Eshell è una shell di per sé, ma simile a bash o ad altre shell.
Quale dovresti usare?
Dipende dalle tue preferenze.
shell
è buono per l'uso generale dei comandi shell unix classici / standard, come {grep, du, ls, sort, cat, head, tail, uname, ...}.
term & ansi-term
sono utili se vuoi eseguire cose come ssh o altre interfacce interattive da riga di comando (come {python, ruby, lisp} shell) o un'app GUI basata su testo come {vim, synaptic, ...}.
eshell
va bene specialmente su Microsoft Windows in cui non è installato bash o, se sei un programmatore emacs lisp, perché eshell ha accesso diretto a emacs lisp.
which grep
in eshll dice "eshell / grep è una" funzione Lisp compilata in `em- unix.el ', perché il grep nel tuo sistema può essere eseguito in eshell, come ho detto eshell è molto utile in MS che non sono installati molti piccoli strumenti come grep.
eshell
li avrò anche se hai quei programmi installati.