En primer lugar, compruebe qué sudo se ejecuta en su sesión de eshell. Puede ser el sudo de su sistema:
$ which sudo
/path/to/system/wide/sudo
$ which *sudo
/path/to/system/wide/sudo
o el 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'
El sudo de Eshell usa el método su o sudo de TRAMP. Estos comandos están en el módulo eshell-tramp, que está deshabilitado de manera predeterminada.
Cubriré el caso sudo de eshell, porque es interno de Emacs y no depende de la distribución de su sistema operativo:
Cargue el módulo eshell-tramp:
(require 'em-tramp) ; to load eshell’s sudo
Cambiar al sudo de eshell
prefiriendo comandos integrados
(setq eshell-prefer-lisp-functions t)
Parece que en Emacs 24.4 necesitamos establecer
(setq eshell-prefer-lisp-variables t)
mediante la creación de un alias (ejecutar fragmento en eshell)
alias sudo 'eshell/sudo $*'
Los alias definidos (o eliminados) por el comando alias se escriben automáticamente en el archivo nombrado por eshell-aliases-file , que también puede editar directamente (aunque tendrá que volver a cargarlo manualmente).
Finalmente habilite el almacenamiento en caché de contraseñas para el sudo de eshell (y TRAMP):
(setq password-cache t) ; enable password caching
(setq password-cache-expiry 3600) ; for one hour (time in secs)
PD Si ha cambiado su solicitud con eshell-prompt-function , recuerde ajustar la solicitud regex eshell-prompt-regexp en consecuencia. La expresión regular incorrecta puede romper algunas funciones de eshell, incluida la detección de contraseña.
which sudo
todavía se muestra/usr/bin/sudo
en mi sistema.