Прежде всего, проверьте, какой 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 и не зависит от вашего дистрибутива ОС:
Загрузить модуль eshell-tramp:
(require 'em-tramp) ; to load eshell’s sudo
Переключиться на судо 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 , который вы также можете редактировать напрямую (хотя вам придется вручную его перезагружать).
Наконец, включите кеширование паролей для 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, включая обнаружение пароля.
which sudo
все еще отображается/usr/bin/sudo
в моей системе.