emacs`shell-mode`는 sudo를 물어 보는 방법을 어떻게 알 수 있습니까?


17

에서 shell-mode와 같은 명령 sudo CMD은 에코 영역에 다음 과 같은 프롬프트를 표시합니다.

[sudo] password for root: 

어떻게해야합니까? AFAIK, 내장 된 프롬프트가 생성되지 sudo않기 때문에이 동작 은 평소처럼 단순히 실행에서 벗어날 수 없습니다 read.

답변:


22

이것은 프로세스 필터를 통해 수행됩니다.

기본적으로 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-quitsudo 프롬프트 유형 C-g에서 진행 상황을 보여주는 역 추적을 얻을 수 있습니다. 예 :

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컴파일되지 않은 코드를로드 한 후 더 자세한 역 추적을 얻을 수있는 전체 과정을 반복합니다.


훌륭한 디버깅 팁!
clemera
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.