Qual è la differenza tra shell, eshell e termine in Emacs?


60

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:


61

shellè la più antica di queste 3 scelte. Usa Emacs comint-modeper 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 nanoo lessall'interno di Emacs).

eshellè una shell implementata direttamente in Emacs Lisp. Non stai eseguendo basho qualsiasi altra shell come sottoprocesso. Di conseguenza, la sintassi non è esattamente la stessa di basho sh. Permette cose come il reindirizzamento dell'output di un processo direttamente su un buffer Emacs (provare echo hello >#<buffer results>).


19

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.


Tutti i comandi che hai citato (grep, du, ls, ecc.) Sono programmi e comandi integrati nella shell. eshellli avrò anche se hai quei programmi installati.
Bart Louwers,

1
@Bart prova a rimuovere grep nel tuo sistema ed esegui grep in eshell, scoprirai che grep in eshell non è grep nel tuo sistema, which grepin 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.
CodyChan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.