bash에서 CTRL+4(및 CTRL+\)는 무엇을 합니까?

bash에서 CTRL+4(및 CTRL+\)는 무엇을 합니까?

방금 명령줄에서 입력을 읽는 프로그램을 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프로그램이 닫힙니다. or 를 사용하는 것과 ^C어떻게 비교됩니까 ^D? ^\Quit효과 는 무엇입니까 ?

편집하다: Discover CTRL+는 \동일한 작업을 수행합니다.

답변1

Ctrl+4 보내기^\

터미널은 키가 아닌 문자(또는 더 정확하게는 바이트)를 보냅니다. 인쇄 가능한 문자를 나타내는 키를 누르면 터미널은 해당 문자를 애플리케이션으로 보냅니다. 대부분의 기능 키는 이스케이프 시퀀스(글리프 27로 시작하는 문자 시퀀스)로 인코딩됩니다. Ctrl+ 형태의 일부 키보드 character와 일부 기능 키는 제어 문자로 전송됩니다.ASCII 문자 집합, 모든 최신 컴퓨터가 기본으로 사용하는 (유니코드, ISO 라틴어-N등은 모두 ASCII의 상위 집합입니다), 33자는 제어 문자입니다(문자 번호 0~31 및 127). 제어 문자는 인쇄할 수 없지만 응용 프로그램 내에서 영향을 주기 위한 것입니다. 예를 들어 문자 10, Control-J(종종 ^J로 표시됨)는 개행 문자이므로 터미널이 이 문자를 표시하면 커서가 다음으로 이동합니다. 글리프를 표시하는 대신 다음 줄. 이스케이프 문자 자체는 제어 문자 ^[(값 27)입니다.

Ctrl모든 + character키 코드를 포함할 수 있는 제어 문자가 충분하지 않습니다 . 문자와 문자에만 @[\]^_?해당 제어 문자가 있습니다. Ctrl+ 4또는 Ctrl+ ( + + $내 생각에는 )를 누르면 단말기에서 무엇을 보낼지 선택해야 합니다. 터미널과 해당 구성에 따라 몇 가지 일반적인 가능성이 있습니다.CtrlShift4

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

많은 터미널은 숫자 줄의 특정 키에 대한 제어 문자를 보냅니다.

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

이 특별한 대회가 어디서 왔는지 모르겠습니다.

Ctrl+ 는 + + |와 동일한 문자를 보내고 , 단말은 Shift 키를 눌렀는지 안 눌렀는지에 관계없이 ^\ 를 보냅니다.CtrlShift\

^\ 종료

터미널 자체(보다 정확하게는 커널의 일반 터미널 지원)는 일부 제어 문자를 독점적으로 해석합니다. 이 해석은 다른 문자를 매핑하도록 구성하거나 문자 자체를 처리하려는 응용 프로그램에서 해제할 수 있습니다. 잘 알려진 해석 중 하나는 ^M(키 누르기에 의해 전송된 문자)이 Return현재 행을 애플리케이션에 보내고, 터미널이요리 모드, 여기서 애플리케이션은 한 줄씩 입력을 받습니다.

몇 글자 보내다신호포그라운드 애플리케이션으로. ^C 보내기인터럽트 신호(SIGINT)는 일반적으로 애플리케이션에 수행 중인 작업을 중지하고 사용자의 다음 명령을 읽도록 지시합니다. 비대화형 애플리케이션은 일반적으로 종료됩니다. ^\ 보내기출구 신호(SIGQUIT)은 일반적으로 아무것도 저장하지 않고 가능한 한 빨리 애플리케이션을 종료하도록 지시합니다. 많은 애플리케이션은 애플리케이션을 즉시 종료하는 기본 동작을 재정의하지 않습니다. 따라서 또는 에서 Ctrl+ 4(또는 ^\ 문자를 보내는 모든 항목)를 누르면 둘 다 기본 동작을 재정의하지 않으며 응용 프로그램이 종료됩니다.catbc

터미널 자체는 ^\메시지의 일부를 인쇄합니다. 이는 입력한 문자에 대한 시각적 설명이며 터미널은 굽기 모드에 있고 에코는 켜져 있습니다(문자는 입력한 직후 터미널에 표시됩니다). - 문자가 응용 프로그램으로만 전송되는 에코 모드에서는 응용 프로그램이 문자를 표시하도록 선택할 수도 있고 선택하지 않을 수도 있습니다. 해당 Quit부분은 bash에서 비롯됩니다. 종료 신호로 하위 프로세스가 종료되었음을 알아차리고 이를 통해 이를 알려줍니다.

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

터미널 설정을 사용하여 이 작업을 수행할 수 있습니다.stty주문하다.

¹전통적 으로코어 덤프, 그러나 이제 많은 시스템에서는 기본적으로 이를 비활성화합니다.

답변2

Giles의 답변 외에도 +를 사용하여 bash에 항상 Ctrl-v인쇄할 수 없는 문자 ( key이 경우 Ctrl-v+ )를 입력 Ctrl+4하고 다음을 사용하여 문자 코드를 확인할 수 있다는 점을 추가하겠습니다.

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

문자의 10진수 코드를 얻고 해당 코드가 다음 man ascii과 일치하는지 확인할 수 있습니다.파일 구분 기호(FS).

관련 정보