eshellにsudoパスワードを2分間記憶させる方法は?


15

runingという一般的な用語ではbashsudo ...コマンドを実行すると、bashはしばらくの間パスワードを記憶します。これにより、パッケージ管理タスクが簡単になります。

例えば:

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

エスホールでそれを達成することは可能ですか?

(私は知っているtermansi-term、Emacsでこれを行うことができます。しかし、eshellはEmacsとより良く統合します。)

回答:


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の内部にあり、OSディストリビューションに依存しないためです。

  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でプロンプトを変更した場合は、それに応じてプロンプトregex eshell-prompt-regexpを調整することを忘れないでください。間違ったプロンプト正規表現は、パスワード検出などの一部のeshell機能を破壊する可能性があります。


これらの指示に従ってwhich sudo/usr/bin/sudo、システムに表示されます。
Boccaperta-IT 14

新しい eshellバッファーでテストしましたか?IIRCの現在のeshellセッションでは、変更が反映されません。
kmicu 14

はい。emacsデーモンを再起動し、新しいクライアントを開きました。
ボッカペルタ-IT 14

浅いテストの後、emacs 24.4では(setq eshell-prefer-lisp- variables t)が必要であることがわかりました。@ Boccaperta-ITは、それがあなたのために働くかどうかを確認できますか?
kmicu 14

まだ、動作しない/usr/bin/sudo(私はかかわらず、Emacsの25.0.50.1を使用しています)
Boccaperta-IT

4

エイリアスを作成せずにEmacs 26(おそらくEmacs 25でも同じ)でsudoを動作させるには、に追加するeshell-tramp必要がありましたeshell-modules-list

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

必要(require 'esh-module)
nymo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.