내가 이해한 바에 따르면 터미널은 나열된 제어 코드를 가로채고 stty -a
쉘(Bash)은 Readline 라이브러리를 활용하여 입력을 처리하고 각 키를 누를 때마다 버퍼링된 입력을 받습니다.
또한 쉘은 터미널 제어 코드를 통해 Readlines 변경 사항을 터미널에 전달해야 합니다. 그런데 단말기에서는 ^W
(단어를 거꾸로 삭제) 등의 제어 코드를 어떻게 단말기에 전달할까요?
이를 확인하기 위해 터미널과 셸 간의 상호 작용을 디버깅하고 싶습니다. 어떻게 해야 합니까?
답변1
셸 -> 터미널 방향에서 통신을 확인하려면 로그 스트림을 사용한 script(1)
다음 로그 파일을 확인하는 것이 가장 쉬운 방법일 것입니다.
ioctl
여기에는 다른 방향(키 누르기)으로의 통신이나 우회 작업( 명령에 해당하는 터미널 ) 은 포함되지 않습니다 stty
.
(그래도 이를 포함해야 한다면 strace
터미널 에뮬레이터의 특정 기능을 적용하거나 디버깅해야 할 것입니다.)
^W
쉘 -> 터미널 방향에는 (뒤로 단어 삭제) 같은 것이 없다는 것을 알 수 있습니다. 지정된 셀 수만큼 커서를 이동하거나 문자를 인쇄(덮어쓰기)하는 등 더 간단한 기본 요소만 존재합니다. 문자 단위에 문자나 공백이 포함되어 있는지에 따라 동작이 다를 수 없으므로 여기에는 "단어"라는 개념이 없습니다.