Answers:
这是通过过程过滤器完成的。
默认情况下comint-output-filter-functions
包含comint-watch-for-password-prompt
,这是处理此问题的过滤器功能。
如果看到文本匹配,comint-password-prompt-regexp
则调用send-invisible
提示用户输入密码。
有关流程过滤器如何工作的更多信息,请参阅 C-hig (elisp)Filter Functions
编辑:作为后续,还请注意,您可以M-x toggle-debug-on-quit
然后在sudo提示符下键入C-gbacktrace,以显示正在发生的事情。例如:
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>: ")
由于正在评估字节编译的代码,因此输出很少,因此comint-output-filter-functions
丢失了详细信息,但是您仍然可以立即看到一般情况。您还M-x load-library
RET comint.el
RET可以加载未编译的代码,然后重复整个过程以获得更详细的回溯。