Primeiro de tudo cheque que sudo é executado na sua sessão eshell. Pode ser o sudo do seu sistema:
$ which sudo
/path/to/system/wide/sudo
$ which *sudo
/path/to/system/wide/sudo
ou sudo de eshell:
$ which sudo
sudo is a compiled Lisp function in `em-tramp.el'
$ which eshell/sudo
eshell/sudo is a compiled Lisp function in `em-tramp.el'
O sudo de Eshell usa o método su ou sudo do TRAMP. Esses comandos estão no módulo eshell-tramp, que é desativado por padrão.
Vou cobrir o caso do suh do eshell, porque é interno ao Emacs e não depende da sua distribuição do SO:
Carregue o módulo eshell-tramp:
(require 'em-tramp) ; to load eshell’s sudo
Mudar para o sudo de eshell
preferindo comandos internos
(setq eshell-prefer-lisp-functions t)
Parece que no Emacs 24.4 precisamos definir
(setq eshell-prefer-lisp-variables t)
criando um alias (execute o snippet no eshell)
alias sudo 'eshell/sudo $*'
Os aliases definidos (ou excluídos) pelo comando alias são gravados automaticamente no arquivo nomeado por eshell-aliases-file , que você também pode editar diretamente (embora seja necessário recarregá-lo manualmente).
Por fim, ative o cache de senhas para o sudo do eshell (e TRAMP):
(setq password-cache t) ; enable password caching
(setq password-cache-expiry 3600) ; for one hour (time in secs)
PS Se você alterou o prompt com a função eshell-prompt- , lembre-se de ajustar o prompt regex eshell-prompt-regexp de acordo. Regex de prompt errado pode quebrar algumas funcionalidades do eshell - incluindo detecção de senha.
which sudo
ainda é exibido/usr/bin/sudo
no meu sistema.