No Emacs, posso executar um shell usando os seguintes comandos -
M-x term
M-x shell
M-x eshell
Qual é a diferença entre esses três?
shell
é a mais antiga dessas três opções. Ele usa o Emacs comint-mode
para executar um subshell (por exemplo bash
). Nesse modo, você está usando o Emacs para editar uma linha de comando. O subprocesso não vê nenhuma entrada até você pressionar Enter. O Emacs está agindo como um terminal idiota. Ele suporta códigos de cores, mas não coisas como mover o cursor, então você não pode executar aplicativos baseados em maldições.
term
é um emulador de terminal escrito em Emacs Lisp. Nesse modo, as teclas pressionadas são enviadas diretamente para o subprocesso; você está usando qualquer recurso de edição de linha que o shell apresente, não o Emacs. Também permite executar programas que usam recursos avançados de terminal, como o movimento do cursor (por exemplo, você pode executar nano
ou less
dentro do Emacs).
eshell
é um shell implementado diretamente no Emacs Lisp. Você não está executando bash
ou qualquer outro shell como um subprocesso. Como resultado, a sintaxe não é exatamente a mesma que bash
ou sh
. Ele permite coisas como redirecionar a saída de um processo diretamente para um buffer Emacs (try echo hello >#<buffer results>
).
De acordo com a página Xahlee :
shell
é a interface padrão do emacs para a interface da linha de comandos do sistema operacional.
term
(ansi-term é praticamente igual ao termo hoje. Eles eram pacotes diferentes, mas agora ambos definidos em term.el) são um emulador de terminal. Ele se comporta como um aplicativo de terminal dedicado, como {xterm, gnome-terminal, puTTY}. É compatível com mais aplicativos de shell do que a interface de shell do emacs, mas as teclas padrão do emacs, como mover o cursor, não funcionam aqui (porque está emulando um terminal).
eshell
é um shell escrito inteiramente no emacs lisp. Nota: não é um emulador de bash. Eshell é uma concha por si só, mas semelhante à concha ou outras conchas.
Qual você deve usar?
Depende da sua preferência.
shell
é bom para uso geral de comandos shell clássico / padrão do unix, como {grep, du, ls, sort, gato, cabeça, cauda, uname,…}.
term & ansi-term
são boas se você deseja executar coisas como ssh ou outra interface interativa de linha de comando (como {python, ruby, lisp} shell) ou aplicativo de GUI baseado em texto, como {vim, synaptic,…}.
eshell
é bom, especialmente no Microsoft Windows onde o bash não está instalado ou, se você é um programador do emacs lisp, porque o eshell tem acesso direto ao emacs lisp.
eshell
também os terá se você tiver esses programas instalados.which grep
no eshll diz "eshell / grep é uma função Lisp compilada no` em- unix.el ', porque o grep no seu sistema pode ser executado no eshell, como eu disse, o eshell é muito útil no MS, pois muitas ferramentas pequenas como o grep não estão instaladas.