Trước hết hãy kiểm tra sudo nào được thực thi trong phiên eshell của bạn. Nó có thể là sudo hệ thống của bạn:
$ which sudo
/path/to/system/wide/sudo
$ which *sudo
/path/to/system/wide/sudo
hoặc udoell 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's sudo sử dụng phương pháp su hoặc sudo của TRAMP. Các lệnh này nằm trong mô-đun eshell-tramp, được tắt theo mặc định.
Tôi sẽ trình bày trường hợp sudo của eshell, vì nó là nội bộ của Emacs và nó không phụ thuộc vào bản phân phối hệ điều hành của bạn:
Tải mô-đun eshell-tramp:
(require 'em-tramp) ; to load eshell’s sudo
Chuyển sang sudo của eshell
bằng cách thích các lệnh tích hợp
(setq eshell-prefer-lisp-functions t)
Có vẻ như trong Emacs 24.4 chúng ta cần thiết lập
(setq eshell-prefer-lisp-variables t)
bằng cách tạo bí danh (thực thi đoạn trích trong eshell)
alias sudo 'eshell/sudo $*'
Các bí danh được xác định (hoặc xóa) bằng lệnh bí danh sẽ tự động được ghi vào tệp có tên eshell-aliases-file , bạn cũng có thể chỉnh sửa trực tiếp (mặc dù bạn sẽ phải tải lại thủ công).
Cuối cùng kích hoạt bộ đệm ẩn mật khẩu cho sudo của eshell (và TRAMP):
(setq password-cache t) ; enable password caching
(setq password-cache-expiry 3600) ; for one hour (time in secs)
PS Nếu bạn đã thay đổi lời nhắc của mình với hàm eshell-prompt-function , thì hãy nhớ điều chỉnh dấu nhắc regex eshell-prompt-regrec tương ứng. Regex nhắc nhở sai có thể phá vỡ một số chức năng eshell - bao gồm cả phát hiện mật khẩu.
which sudo
vẫn hiển thị/usr/bin/sudo
trên hệ thống của tôi.