나는 이것이 이미 답변되었다는 것을 알고 있지만, 대답은 무슨 일이 일어나고 있는지 설명하지 않습니다.
Ctrl+ 와 같은 문자 L는 응용 프로그램에서 처리 합니다 . 와 같이 입력을 쉘에 입력 bash
하면 화면이 지워집니다. 와 같은 일부 응용 프로그램은이 기능 emacs
을 사용하여 화면을 다시 그리거나 커서를 최근에 표시합니다.
암호 프롬프트에서 Ctrl+ 와 같은 문자 U는 TTY 라인 규칙에 의해 처리됩니다 . 입력 터미널이 "정식"라인 편집 모드에있을 때 작동합니다. 이는 암호를 입력하는 동안 프로그램이 사용하는 모드입니다. 이 모드에서는 이러한 문자를 해석하는 것이 Linux 커널 자체입니다. 의 출력에서 어떤 키에 어떤 기능이 할당되어 있는지 확인할 수 있습니다 stty -a
.
speed 38400 baud; rows 45; columns 128; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
여기에서 Ctrl+ U가 kill
( stty man page 에 따라 ) "현재 줄을 지울 것" 으로 묶인 것을 볼 수 있습니다 . stty
이 매핑을 변경 하는 데 사용할 수도 있습니다 .
stty kill ^E # make ctrl-e erase the line
이 페이지 에는 관심이 있다면 TTY 레이어에 대한 많은 정보가 있습니다.
상황이 충분히 혼란스럽지 않은 경우 : 대화식 프롬프트가 표시되면 bash
실제로 는 "정식"라인 편집 모드 가 아닙니다 . 대신, bash
입력 할 때 각 문자를 직접 수신하고 readline 라이브러리를 통해 제어 순서 자체를 해석합니다 . 이 라이브러리 는 터미널 장치에 설정 한 매핑을 그대로 유지하므로 stty
이를 변경하는 데 계속 사용할 수 있습니다. 또는 파일 내부 bash
의 unix-line-discard
속성 을 설정하여 내부 및 기타 리드 라인 기반 프로그램에서 독립적으로 사용자 정의 할 수 있습니다 ~/.inputrc
. 자세한 내용은 bash 매뉴얼 페이지 를 참조하십시오.
프로그램을 실행할 때 이전에 활성화 된 경우 bash
표준 라인 편집 모드 ( stty icanon
)를 다시 활성화 한 다음 프로그램이 완료되면 다시 비활성화합니다 ( stty -icanon
).