Qual é a diferença entre shell, eshell e termo no Emacs?

54

No Emacs eu posso rodar um shell usando os seguintes comandos -

M-x term

M-x shell

M-x eshell

Qual é a diferença entre esses três?

    
por Kshitiz Sharma 09.12.2013 / 05:21

2 respostas

55

shell é a mais antiga dessas três opções. Ele usa comint-mode do Emacs para executar um subshell (por exemplo, bash ). Neste modo, você está usando o Emacs para editar uma linha de comando. O subprocesso não vê nenhuma entrada até você pressionar Enter. Emacs está agindo como um terminal idiota. Ele suporta códigos de cores, mas não coisas como mover o cursor, portanto, não é possível executar aplicativos baseados em maldições.

term é um emulador de terminal escrito em Emacs Lisp . Neste modo, as teclas que você pressiona são enviadas diretamente para o subprocesso; você está usando qualquer capacidade de edição de linha que o shell apresenta, não o Emacs. Ele também permite que você execute 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 subprocesso. Como resultado, a sintaxe não é igual a bash ou sh . Ele permite coisas como redirecionar a saída de um processo diretamente para um buffer do Emacs (tente echo hello >#<buffer results> ).

    
por 09.12.2013 / 06:38
16

De acordo com a página Xahlee :

shell é a interface padrão do emacs para a interface de linha de comando do Sistema Operacional.

term (ansi-term é praticamente igual a termo hoje. Eles eram pacotes diferentes, mas agora ambos definidos em term.el) é um emulador de terminal. Ele se comporta como um aplicativo de terminal dedicado, como {xterm, gnome-terminal, puTTY}. É compatível com mais aplicativos shell do que com a interface shell do emacs, mas chaves emacs padrão, como mover o cursor, não funcionam aqui (porque ele está emulando um terminal).

eshell é um shell escrito inteiramente em emacs lisp. Nota: não é um emulador de bash. Eshell é uma concha por si só, mas semelhante a bash ou outras conchas.

Qual você deve usar?

Depende da sua preferência.

shell é bom para o uso geral de comandos shell unix clássicos / padrão, como {grep, du, ls, sort, cat, head, tail, uname,…}.

term & ansi-term são bons se você deseja executar coisas como ssh ou outra interface interativa de linha de comando (como {python, ruby, lisp} shell) ou aplicativo GUI baseado em texto como {vim, synaptic,…} .

eshell é bom, especialmente no Microsoft Windows, no qual o bash não está instalado ou, se você for um programador lisp do emacs, porque o eshell tem acesso direto ao emacs lisp.

    
por 20.01.2015 / 19:44

Tags