Как дать eshell запомнить пароль sudo на две минуты?

15

В общем случае bash, когда я запускаю sudo ...команду, bash некоторое время запоминает мой пароль. Это облегчает задачу управления пакетами.

Например:

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

Возможно ли это сделать в eshall?

(Я знаю, termили ansi-termв Emacs это можно сделать. Но eshell лучше интегрируется с Emacs.)

Ник
источник

Ответы:

14

Прежде всего, проверьте, какой sudo выполняется в вашей сессии eshell. Это может быть sudo вашей системы:

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

или eshell's sudo:

$ 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'

Eshell в Судо использует су или SUDO метод бродяга в. Эти команды находятся в модуле eshell-tramp, который по умолчанию отключен.

Я расскажу о случае sudo в eshell, поскольку он является внутренним по отношению к Emacs и не зависит от вашего дистрибутива ОС:

  1. Загрузить модуль eshell-tramp:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. Переключиться на судо Eshell

    • предпочитая встроенные команды

      (setq eshell-prefer-lisp-functions t)
      

      Похоже, что в Emacs 24.4 нам нужно установить

      (setq eshell-prefer-lisp-variables t)
      
    • путем создания псевдонима (выполнить фрагмент в eshell)

      alias sudo 'eshell/sudo $*'
      

      Псевдонимы, определенные (или удаленные) командой alias, автоматически записываются в файл с именем eshell-aliases-file , который вы также можете редактировать напрямую (хотя вам придется вручную его перезагружать).

  3. Наконец, включите кеширование паролей для eshell sudo (и TRAMP):

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

PS Если вы изменили приглашение с помощью eshell-prompt-function , не забудьте соответствующим образом настроить регулярное выражение esx-prompt-regexp . Неправильное регулярное выражение может нарушить некоторые функции eshell, включая обнаружение пароля.

kmicu
источник
После выполнения этих инструкций which sudoвсе еще отображается /usr/bin/sudoв моей системе.
Boccaperta-IT 22.12.14
Вы проверяли это с новым буфером eshell? Текущий сеанс eshell IIRC не воспринимает изменения.
kmicu 22.12.14
Да. Я перезапустил emacs daemon и открыл новый клиент.
Boccaperta-IT
После поверхностного тестирования я вижу, что (setq eshell-предпочитать-lisp- переменные t) требуется в emacs 24.4. @ Boccaperta-IT можешь подтвердить, работает ли он у тебя?
kmicu
/usr/bin/sudoТем не менее, не работает (я использую Emacs 25.0.50.1)
Boccaperta-IT
4

Чтобы получить Sudo работает в Emacs 26 (вероятно , то же самое для Emacs 25) без псевдонима , я должен был добавить eshell-trampк eshell-modules-list.

(add-to-list 'eshell-modules-list 'eshell-tramp)
Emmatipate
источник
Также необходимо(require 'esh-module)
Nymo