Przede wszystkim sprawdź, które sudo jest wykonywane w sesji eshell. Może to być sudo twojego systemu:
$ which sudo
/path/to/system/wide/sudo
$ which *sudo
/path/to/system/wide/sudo
lub sudo eshell:
$ 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 za sudo wykorzystuje su lub sudo metodę Tramp jest. Te polecenia znajdują się w module eshell-tramp, który jest domyślnie wyłączony.
Omówię sprawę sudo eshell, ponieważ jest ona wewnętrzna dla Emacsa i nie zależy od dystrybucji systemu operacyjnego:
Załaduj moduł eshell-tramp:
(require 'em-tramp) ; to load eshell’s sudo
Przejdź do sudo eshell
preferując wbudowane polecenia
(setq eshell-prefer-lisp-functions t)
Wygląda na to, że w Emacsie 24.4 musimy ustawić
(setq eshell-prefer-lisp-variables t)
przez utworzenie aliasu (wykonaj fragment w eshell)
alias sudo 'eshell/sudo $*'
Aliasy zdefiniowane (lub usunięte) przez polecenie aliasu są automatycznie zapisywane do pliku o nazwie eshell-aliases-file , który można również edytować bezpośrednio (chociaż trzeba będzie go ręcznie załadować ponownie).
Na koniec włącz buforowanie haseł dla sudo eshell (i TRAMP):
(setq password-cache t) ; enable password caching
(setq password-cache-expiry 3600) ; for one hour (time in secs)
PS Jeśli zmieniłeś swój monit za pomocą funkcji eshell-prompt- , pamiętaj o odpowiednim dostosowaniu wyrażenia regularnego eshell-prompt-regexp . Błędne wyrażenie regularne może uszkodzić niektóre funkcje eshell - w tym wykrywanie hasła.
Po wykonaniu tych instrukcji which sudonadal wyświetla się /usr/bin/sudow moim systemie.
Boccaperta-IT,
Czy przetestowałeś go przy użyciu świeżego bufora eshell? Bieżąca sesja eshell IIRC nie odbierze zmian.
kmicu
Tak. Zrestartowałem demona emacs i otworzyłem nowego klienta.
Boccaperta-IT,
Po płytkich testach widzę, że (setq eshell-prefer-lisp- zmienne t) jest wymagany w emacsie 24.4. @ Boccaperta-IT czy możesz potwierdzić, czy to działa dla Ciebie?
kmicu
Wciąż nie działa /usr/bin/sudo(używam Emacsa 25.0.50.1)
Boccaperta-IT,
4
Aby uzyskać sudo pracuje w Emacs 26 (chyba sam za Emacs 25) bez dokonywania alias musiałem dodać eshell-trampdo eshell-modules-list.
which sudo
nadal wyświetla się/usr/bin/sudo
w moim systemie./usr/bin/sudo
(używam Emacsa 25.0.50.1)Aby uzyskać sudo pracuje w Emacs 26 (chyba sam za Emacs 25) bez dokonywania alias musiałem dodać
eshell-tramp
doeshell-modules-list
.źródło
(require 'esh-module)