Come far ricordare a eshell la password sudo per due minuti?


15

In generale bash, quando eseguo un sudo ...comando, bash ricorderà la mia password per un po '. Ciò semplifica l'attività di gestione dei pacchetti.

Per esempio:

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

È possibile realizzarlo in eshall?

(Lo so termo ansi-termin Emacs puoi farlo. Ma eshell si integra meglio con Emacs.)

Risposte:


14

Prima di tutto controlla quale sudo viene eseguito nella tua sessione eshell. Può essere il sudo del tuo sistema:

$ which sudo
/path/to/system/wide/sudo
$ which *sudo
/path/to/system/wide/sudo

o sudo di 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'

Il sudo di Eshell usa il metodo su o sudo di TRAMP. Questi comandi si trovano nel modulo eshell-tramp, che è disabilitato di default.

Tratterò il caso sudo di eshell, perché è interno a Emacs e non dipende dalla distribuzione del tuo sistema operativo:

  1. Carica il modulo eshell-tramp:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. Passa al sudo di eshell

    • preferendo i comandi integrati

      (setq eshell-prefer-lisp-functions t)
      

      Sembra che in Emacs 24.4 dobbiamo impostare

      (setq eshell-prefer-lisp-variables t)
      
    • creando un alias (esegui lo snippet in eshell)

      alias sudo 'eshell/sudo $*'
      

      Gli alias definiti (o eliminati) dal comando alias vengono automaticamente scritti nel file denominato da eshell-aliases-file , che puoi anche modificare direttamente (anche se dovrai ricaricarlo manualmente).

  3. Infine abilita la memorizzazione nella cache delle password per sudo di eshell (e TRAMP):

    (setq password-cache t) ; enable password caching
    (setq password-cache-expiry 3600) ; for one hour (time in secs)
    

PS Se hai modificato il tuo prompt con eshell-prompt-function , ricorda di modificare di conseguenza regex eshell-prompt-regexp . Regex prompt errato può interrompere alcune funzionalità di eshell, incluso il rilevamento della password.


Dopo aver seguito queste istruzioni, which sudoviene ancora visualizzato /usr/bin/sudosul mio sistema.
Boccaperta-IT,

L'hai provato con un nuovo buffer eshell? La sessione eshell IIRC corrente non rileverà le modifiche.
kmicu,

Sì. Ho riavviato il demone emacs e ho aperto un nuovo client.
Boccaperta-IT,

Dopo un test superficiale, vedo che (setq eshell-prefer-lisp- variabili t) è richiesto in emacs 24.4. @ Boccaperta-IT puoi confermare se funziona per te?
kmicu,

Non funziona, comunque /usr/bin/sudo(sto usando Emacs 25.0.50.1, però)
Boccaperta-IT,

4

Per ottenere sudo lavorare in Emacs 26 (probabilmente lo stesso per Emacs 25) senza fare un alias ho dovuto aggiungere eshell-trampa eshell-modules-list.

(add-to-list 'eshell-modules-list 'eshell-tramp)

anche bisogno di(require 'esh-module)
nymo il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.