Emacs `kabuk-modu` sudo istemini nasıl bilebilir?


17

İçinde shell-mode, gibi bir komut sudo CMDyankı alanında şöyle bir istem açar:

[sudo] password for root: 

Bunu yapmayı nereden biliyor? AFAIK, bu davranış sudoher zamanki gibi koşmaktan readkurtulamaz , çünkü yerleşik böyle bir istem oluşturmaz.

Yanıtlar:


22

Bu bir işlem filtresi ile yapılır.

Varsayılan olarak comint-output-filter-functions, comint-watch-for-password-promptbunu işleyen filtre işlevidir.

Metin eşleşmesini görürse kullanıcıdan şifre istemek için comint-password-prompt-regexpçağrıda bulunur send-invisible.

İşlem filtrelerinin nasıl çalıştığı hakkında daha fazla bilgi için bkz. C-hig (elisp)Filter Functions


Düzenleme: Bir takip olarak, ayrıca M-x toggle-debug-on-quitve sonra sudo istemi türünde C-gneler olduğunu gösteren bir geri izleme almak için unutmayın. Örneğin:

Debugger entered--Lisp error: (quit)
  read-string("[sudo] password for <username>: " nil t nil)
  read-passwd("[sudo] password for <username>: ")
  send-invisible("[sudo] password for <username>: ")
  comint-watch-for-password-prompt("[sudo] password for <username>: ")
  run-hook-with-args(comint-watch-for-password-prompt "[sudo] password for <username>: ")
  comint-output-filter(#<process shell> "[sudo] password for <username>: ")

Değerlendirilen bayt-derlenmiş kod nedeniyle çıktı minimumdur, bu nedenle detayı comint-output-filter-functionskaybolur, ancak genel durumu hemen görebilirsiniz. Ayrıca M-x load-library RET comint.el RET, derlenmemiş kodu yükleyebilir ve daha ayrıntılı bir geri izleme elde etmek için tüm işlemi tekrarlayabilirsiniz.


Büyük hata ayıklama ipucu!
— clemera
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.