ก่อนอื่นให้ตรวจสอบว่าsudoใดถูกดำเนินการในเซสชัน eshell ของคุณ มันอาจเป็น sudo ของระบบของคุณ:
$ which sudo
/path/to/system/wide/sudo
$ which *sudo
/path/to/system/wide/sudo
หรือ 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'
sudoของ Eshell ใช้วิธี su หรือ sudo ของ TRAMP คำสั่งเหล่านี้อยู่ในโมดูล eshell-tramp ซึ่งถูกปิดใช้งานตามค่าเริ่มต้น
ฉันจะครอบคลุมกรณี sudo ของ eshell เนื่องจากเป็นภายใน Emacs และไม่ได้ขึ้นอยู่กับ distro OS ของคุณ:
โหลดโมดูล eshell-tramp:
(require 'em-tramp) ; to load eshell’s sudo
เปลี่ยนเป็น 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โดยอัตโนมัติซึ่งคุณสามารถแก้ไขได้โดยตรง (แม้ว่าคุณจะต้องโหลดซ้ำด้วยตนเอง)
ในที่สุดเปิดใช้งานการแคชรหัสผ่านสำหรับ sudo (และ TRAMP) ของ eshell:
(setq password-cache t) ; enable password caching
(setq password-cache-expiry 3600) ; for one hour (time in secs)
ป.ล. ถ้าคุณได้เปลี่ยนพรอมต์ของคุณด้วยeshell-prompt-functionจากนั้นอย่าลืมปรับ prompt regex eshell-prompt-regexpตามนั้น regex ที่ไม่ถูกต้องอาจทำให้ฟังก์ชันการทำงานของ eshell ผิดพลาดรวมถึงการตรวจจับรหัสผ่าน
which sudo
จะยังคงปรากฏ/usr/bin/sudo
ในระบบของฉัน