cat이 표시하지 않는 특수 코드에 대해 내 터미널이 전송하는 이스케이프 코드가 무엇인지 어떻게 알 수 있나요?

cat이 표시하지 않는 특수 코드에 대해 내 터미널이 전송하는 이스케이프 코드가 무엇인지 어떻게 알 수 있나요?

내 터미널이 Ctrl+Backspace 및 Alt+Backspace에 대해 무엇을 보내는지 알고 싶습니다. 이를 수행하는 표준 방법은 cat터미널에서 실행하고 일반적으로 작동하는 항목을 입력하는 것입니다. 그러나 이와 같은 일부 출력에서는 결과가 까다롭습니다.

\x1b\x7fAlt+Backspace가 전송 중 (즉, 백스페이스 이스케이프)인 것 같지만 cat실행하고 Ctrl+V 및 Alt+Backspace를 입력하거나 Alt+Backspace만 입력하면 어떻게 됩니까? 이스케이프 문자가 "입력"된 다음 즉시 삭제됩니다. 백스페이스 키를 사용하면 아무 일도 일어나지 않은 것처럼 보입니다. 단 한 번, 나는 내 컴퓨터가 탈출 프레임을 렌더링하는 것을 보고 ^[단서를 얻었 습니다.

지금까지 Ctrl+Backspace가 보내는 내용을 파악하는 방법을 잘 모르겠습니다. 둘 다 bash 프롬프트에서 단어를 삭제하더라도 Ctrl+W는 아닙니다. bash 프롬프트에서는 cat아무 작업도 수행하지 않는 반면 Ctrl+W는 단어를 삭제하기 때문입니다!

답변1

다음 명령을 사용하세요.

showkey -a

답변2

에서 zsh:

$ STTY='raw -echo min 0 time 40' cat -vte
^[^?

또는 다음을 사용하여 bash:

$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?

터미널이 원시 입력을 보내고 에 의해 렌더링되는 것을 볼 수 있습니다 cat -vte. 4초(40분초) 동안 아무 것도 입력하지 않고 정지합니다.

예를 들어, 대신 cat -vte( od -An -w1 -tu1 -tx1 -to1 -taGNU od또는 호환 가능하다고 가정) 각 바이트 값을 10진수, 16진수, 8진수 또는 문자 형식으로 볼 수 있습니다.

  27
  1b
 033
 esc
 127
  7f
 177
 del

답변3

.bash를 사용하여 bash에서 단일 문자를 표시하는 방법을 다른 곳에서 찾았습니다 read -rsn1 key && echo "$key" | xxd. 90% 완료되었지만 전체 그림이 아닌 0x1b(이스케이프)만 반환되기 때문에 한동안 이 문제가 해결되지 않았습니다.

그런 다음 그것을 로 변경했고 read -rsn2 key && echo "$key" | xxd이것은 이스케이프 시퀀스의 문자 수까지 정확히 확장되었습니다. 약간의 실험을 통해 트릭을 만들었습니다. 그래서 내 터미널에는둘 다편의상 Ctrl+ 및 Alt+Backspace를 0x1b, 0x7f(메타-백스페이스)로 매핑하는 데 사용되었습니다. 두 가지 조합으로 단어를 삭제할 수 있도록 새 터미널 에뮬레이터를 구성하고 싶었지만 그 중 하나만 작동하기 때문에 이 경로를 먼저 선택했습니다. bash 내의 bash는 read -rsn비교를 수행하는 훌륭한 도구입니다 cat.

관련 정보