bash에서 CTRL + 4 (및 CTRL + \)의 기능은 무엇입니까? 2000, 2004, 2006

방금 우연히 CTRL+ 명령 줄에서 입력을 4 읽는 프로그램을 닫습니다 stdin.

이것이 프로그램 읽기에 CTRL+ 4또는 CTRL+ /를 입력 할 때의 모습입니다stdin

$ cat
wefwef
wefwef
^\Quit
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
^\Quit
$

내가 얻을 ^\Quit표시 한 다음 프로그램을 닫습니다. 이것의 차이는 사용하는 것에 비해 무엇 ^C이나 ^D? 무엇을 ^\Quit합니까?

편집 : CTRL+ \가 똑같은 일을한다는 것을 알았습니다.



답변

Ctrl + 4는 ^ \를 보냅니다.

터미널은 키가 아닌 문자 (또는보다 정확하게 바이트)를 보냅니다. 인쇄 가능한 문자를 나타내는 키를 누르면 단말기는 해당 문자를 응용 프로그램으로 보냅니다. 대부분의 기능 키는 이스케이프 시퀀스로 인코딩됩니다 : 문자 번호 (27) 양식의 일부 keychords로 시작하는 문자 시퀀스 Ctrl+ character, 그리고 몇 가지 기능 키가 제어 문자로 전송됩니다 -에 ASCII 문자 세트 , 모든 현대 컴퓨터 기초로 사용 (유니 코드, ISO 라틴어 n등은 모두 ASCII의 상위 집합입니다.) 33 문자는 제어 문자입니다. 문자 번호는 0-31 및 127입니다. 제어 문자는 인쇄 할 수 없지만 응용 프로그램에 영향을 미칩니다. 예를 들어, Control-J (일반적으로 ^ J로 표시됨) 인 문자 10은 개행 문자이므로 터미널에서 해당 문자를 표시하면 문자를 표시하지 않고 다음 행으로 커서를 이동합니다. 이스케이프 문자 자체는 제어 문자 ^ [(값 27)입니다.

모든 Ctrl+ 키 character코드 를 포괄 할 수있는 제어 문자가 충분하지 않습니다 . 문자와 문자 만 @[\]^_?해당 제어 문자를 갖습니다. Ctrl+ 4또는 Ctrl+ 를 누르면 $(내가 Ctrl+ Shift+ 라고 추정 4) 터미널은 전송할 것을 선택해야합니다. 터미널과 구성에 따라 몇 가지 일반적인 가능성이 있습니다.

  • 터미널은 Ctrl수정자를 무시하고 문자 4또는을 보냅니다 $.
  • 터미널은 누른 정확한 키와 수정자를 인코딩하는 이스케이프 시퀀스를 보냅니다.
  • 터미널은 다른 제어 문자를 보냅니다.

많은 터미널이 숫자 행의 일부 키에 대한 제어 문자를 보냅니다.

  • Ctrl+ 2→ ^ @
  • Ctrl+ 3→ ^ [
  • Ctrl+ 4→ ^ \
  • Ctrl+ 5→ ^]
  • Ctrl+ 6→ ^^
  • Ctrl+ 7→ ^ _
  • Ctrl+ 8→ ^?

나는이 특별한 협약이 어디서 일어 났는지 모른다.

Ctrl+ |Ctrl+ Shift+ 이기 때문에 같은 문자를 \보내고 터미널은 Shift 키를 눌렀는지 여부에 상관없이 ^ \를 보냅니다.

^ \ 종료

터미널 자체 (보다 정확하게는 커널의 일반 터미널 지원)는 몇 가지 제어 문자를 특수하게 해석합니다. 이 해석은 다른 문자를 맵핑하거나 문자 자체를 처리하려는 애플리케이션에 의해 해제되도록 구성 할 수 있습니다. 잘 알려진 이러한 해석 중 하나는 Return키로 문자를 보내는 ^ M 은 터미널이 쿠킹 모드 인 경우 응용 프로그램에 현재 행을 응용 프로그램에 전송하는 것으로 응용 프로그램은 한 줄씩 입력을받는 것입니다.

일부 문자 는 포 그라운드에서 응용 프로그램으로 신호 를 보냅니다 . ^ C는 인터럽트 신호 (SIGINT)를 전송합니다. 이 신호 는 일반적으로 응용 프로그램에서 수행중인 작업을 중지하고 사용자의 다음 명령을 읽도록 지시합니다. 비 대화식 응용 프로그램은 일반적으로 종료됩니다. ^ \ 종료 신호 (SIGQUIT)를 전송합니다. 이 신호 는 일반적으로 아무 것도 저장하지 않고 가능한 빨리 응용 프로그램을 종료하도록 지시합니다. 많은 응용 프로그램은 기본 동작을 무시하지 않습니다. 즉, 응용 프로그램을 즉시 종료하는 것 ¹. 따라서 또는에서 Ctrl+ 4(또는 ^ \ 문자를 보내는 항목) 를 누르 cat거나 bc둘 다 기본 동작을 무시하지 않으면 응용 프로그램이 종료됩니다.

터미널 자체 ^\는 메시지 의 일부를 인쇄합니다 . 입력 한 문자를 시각적으로 보여 주며 터미널은 요리 모드에 있고 반향이 켜져 있습니다 (문자는 입력하는 즉시 문자를 입력하자마자 터미널에 의해 표시됨) 문자가 응용 프로그램으로 만 전송되고 표시되도록 선택하거나 선택하지 않을 수있는 비에코 모드) 그 Quit부분은 bash에서 온 것입니다. 자식 프로세스가 종료 신호로 죽었다는 것을 알았습니다.

쉘은 모든 공통 신호를 처리하므로 쉘에 ^ \를 입력하면 세션이 종료되지 않고 ^ C와 같은 새로운 프롬프트가 표시됩니다.

stty명령 으로 터미널 설정을 재생할 수 있습니다 .

¹ 그리고 전통적으로 코어 덤프를 생성 하지만 오늘날 많은 시스템에서 기본적으로이를 비활성화합니다.


답변

Gilles 답변 외에도 Ctrl-v+ key( 이 경우 Ctrl-v+) Ctrl+4를 사용하여 bash에서 인쇄 할 수없는 문자를 입력 하고 문자 코드를 확인할 수 있습니다.

$ printf '^\' | od -An -tu    # input ^\ as C-v C-4
28

체크인 man ascii할 때 파일 구분 기호 (FS) 에 해당하는 문자의 10 진수 코드를 얻습니다 .