Прежде всего, проверьте, какой 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в моей системе.
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.
which sudo
все еще отображается/usr/bin/sudo
в моей системе./usr/bin/sudo
Тем не менее, не работает (я использую Emacs 25.0.50.1)Чтобы получить Sudo работает в Emacs 26 (вероятно , то же самое для Emacs 25) без псевдонима , я должен был добавить
eshell-tramp
кeshell-modules-list
.источник
(require 'esh-module)