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