如何让eshell记住sudo密码两分钟?


15

一般来说,运行时bash,当我运行sudo ...命令时,bash会记住我的密码一段时间。这使软件包管理任务更加容易。

例如:

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

是否有可能完成这项工作?

(我知道term或者ansi-term在Emacs中都可以做到这一点。但是eshell与Emacs集成得更好。)

Answers:


14

首先检查在您的eshell会话中执行了哪个sudo。可能是系统的sudo:

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

或eshell的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使用TRAMP的su或sudo方法。这些命令位于eshell-tramp模块中,该模块默认情况下处于禁用状态。

我将介绍eshell的sudo情况,因为它在Emacs内部,并且不依赖于您的操作系统发行版:

  1. 加载eshell-tramp模块:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. 切换到eshell的sudo

    • 通过首选内置命令

      (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更改了提示,请记住相应地调整提示正则表达式eshell-prompt-regexp。错误的提示正则表达式会破坏某些eshell功能-包括密码检测。


按照这些说明进行操作后,which sudo仍显示/usr/bin/sudo在我的系统上。
Boccaperta-IT 2014年

您是否使用新的 eshell缓冲区对其进行了测试?IIRC当前的eshell会话将不会接收更改。
kmicu 2014年

是。我重新启动了emacs守护程序并打开了一个新客户端。
Boccaperta-IT 2014年

经过浅层测试后,我发现emacs 24.4需要(setq eshell-prefer-lisp- variables t)。@ Boccaperta-IT您可以确认它是否对您有用吗?
kmicu 2014年

仍然/usr/bin/sudo无法正常工作(尽管我使用的是Emacs 25.0.50.1)
Boccaperta-IT 2014年

4

要获得须藤在Emacs 26(可能是同为Emacs 25)未做别名我不得不添加工作eshell-trampeshell-modules-list

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

还需要(require 'esh-module)
nymo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.