¿Cómo sabe emacs `shell-mode` solicitar sudo?

Pregunta:

En shell-mode , un comando como sudo CMD abre un mensaje en el área de eco que dice:

[sudo] password for root: 

¿Cómo sabe hacer esto? AFAIK, este comportamiento no puede surgir simplemente de ejecutar sudo como de costumbre, porque la read incorporada no crea tal mensaje.

Respuesta:

Esto se realiza mediante un filtro de proceso.

Por defecto, comint-output-filter-functions incluye comint-watch-for-password-prompt , que es la función de filtro que maneja esto.

Si ve texto que coincide con comint-password-prompt-regexp entonces llama a send-invisible para solicitar al usuario una contraseña.

Para obtener más información acerca de cómo funcionan los filtros proceso, consulte CH I g (elisp)Filter Functions


Editar: como seguimiento, tenga en cuenta también que puede Mx toggle-debug-on-quit y luego, en el indicador de sudo, escriba Cg para obtener un seguimiento que mostrará lo que está sucediendo. p.ej:

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>: ")

La salida es mínima debido al código compilado por bytes que se está evaluando, por lo que se comint-output-filter-functions el detalle de las comint-output-filter-functions de comint-output-filter-functions de comint-output-filter-functions , pero aún puede ver inmediatamente la situación general. También puede Mx load-library RET comint.el RET para cargar el código no compilado y luego repetir todo el proceso para obtener un rastreo más detallado.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım