Pregunta:
En un término general ejecutando bash
, cuando ejecuto un comando sudo ...
, bash recordará mi contraseña por un tiempo. Esto facilita la tarea de administración de paquetes.
Por ejemplo:
sudo apt-get update
# password ......
sudo apt-get install turing-brain
# execute without requiring password again.
¿Es posible lograrlo en todo el mundo?
(Sé que term
o ansi-term
en Emacs puede hacer esto. Pero eshell se integra mejor con Emacs).
Respuesta:
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 forma predeterminada.
Cubriré el caso de 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 los comandos integrados
(setq eshell-prefer-lisp-functions t)
Parece que en Emacs 24.4 necesitamos configurar
(setq eshell-prefer-lisp-variables t)
-
creando un alias (ejecute el 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 indicador con eshell-prompt-function , recuerde ajustar el indicador regex eshell-prompt-regexp en consecuencia. Una expresión regular incorrecta puede romper algunas funciones de eshell, incluida la detección de contraseñas.