Pertama-tama periksa sudo mana yang dieksekusi di sesi eshell Anda. Ini bisa menjadi sudo sistem Anda:
$ which sudo
/path/to/system/wide/sudo
$ which *sudo
/path/to/system/wide/sudo
atau 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 ini sudo menggunakan gelandangan ini su atau sudo metode. Perintah-perintah ini ada dalam modul eshell-tramp, yang dinonaktifkan secara default.
Saya akan membahas kasus sudo eshell, karena ini internal untuk Emacs dan tidak bergantung pada distro OS Anda:
Muat modul eshell-tramp:
(require 'em-tramp) ; to load eshell’s sudo
Beralih ke sudo eshell
dengan lebih memilih perintah bawaan
(setq eshell-prefer-lisp-functions t)
Tampaknya dalam Emacs 24.4 kita perlu mengatur
(setq eshell-prefer-lisp-variables t)
dengan membuat alias (jalankan cuplikan di eshell)
alias sudo 'eshell/sudo $*'
Alias yang didefinisikan (atau dihapus) oleh perintah alias secara otomatis ditulis ke file bernama oleh eshell-aliases-file , yang juga dapat Anda edit secara langsung (walaupun Anda harus memuat ulang secara manual).
Akhirnya aktifkan caching kata sandi untuk sudo eshell (dan TRAMP):
(setq password-cache t) ; enable password caching
(setq password-cache-expiry 3600) ; for one hour (time in secs)
PS Jika Anda telah mengubah prompt Anda dengan eshell-prompt-function , maka ingatlah untuk menyesuaikan prompt regex eshell-prompt-regexp sesuai. Regex prompt yang salah dapat merusak beberapa fungsi eshell - termasuk deteksi kata sandi.
which sudo
masih ditampilkan/usr/bin/sudo
di sistem saya.