まず、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ディストリビューションに依存しないためです。
eshell-trampモジュールをロードします。
(require 'em-tramp) ; to load eshell’s sudo
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という名前のファイルに自動的に書き込まれます。このファイルは、直接編集することもできます(手動でリロードする必要があります)。
最後に、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
、システムに表示されます。