Como deixar o eshell lembrar a senha do sudo por dois minutos?

15

Em um termo geral bash, quando executo um sudo ...comando, o bash lembrará minha senha por um tempo. Isso facilita a tarefa de gerenciamento de pacotes.

Por exemplo:

sudo apt-get update
# password ......
sudo apt-get install turing-brain
# execute without requiring password again.

É possível realizá-lo no eshall?

(Eu sei termou ansi-termno Emacs pode fazer isso. Mas o eshell se integra melhor ao Emacs.)

usuario
fonte

Respostas:

14

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:

  1. Carregue o módulo eshell-tramp:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. 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).

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

kmicu
fonte
Depois de seguir estas instruções, which sudoainda é exibido /usr/bin/sudono meu sistema.
Boccaperta-IT
Você o testou com um buffer eshell novo ? A sessão de eshell atual do IIRC não capta as alterações.
Kmicu
Sim. Reiniciei o emacs daemon e abro um novo cliente.
Boccaperta-IT
Após um teste superficial, vejo que (setq eshell-prefer-lisp- variable t) é necessário no emacs 24.4. @ Boccaperta-IT, você pode confirmar se funciona para você?
kmicu 23/12/14
Ainda não está funcionando /usr/bin/sudo(estou usando o Emacs 25.0.50.1)
Boccaperta-IT
4

Para obter sudo trabalhando em Emacs 26 (provavelmente o mesmo para Emacs 25) sem fazer um alias eu tive que adicionar eshell-trampa eshell-modules-list.

(add-to-list 'eshell-modules-list 'eshell-tramp)
Emmatipate
fonte
também precisa(require 'esh-module)
nymo