CTRL + C 일 때 ^ C 제거


25

Red Hat Enterprise Linux 6 ( "Santiago")의 shell include에서 + 를 ^C눌렀을 때 제거 할 수 있는 방법이 있습니까? 본인의 편집 권한이 있습니다 .CTRLC.bash_profile


4
시도set echo-control-characters off
Sundeep

1
시도했지만 작동하지 않습니다
Fede Gold

답변:


29

~/.inputrc파일을 편집 (또는 작성)하십시오 . 말하는 줄 추가

set echo-control-characters Off

이것은 Bash가 사용하는 GNU Readline 라이브러리에 제어 문자를 화면에 출력하지 않도록 지시합니다. 이 설정은 이후의 모든 새로운 Bash 세션 (및 Readline 라이브러리를 사용하는 다른 유틸리티)에서 활성화됩니다.

것을 알 수 있는 경우 유닉스 시스템 (보통의 Readline 라이브러리 시스템 전체 구성 파일과 함께 제공 /etc/inputrc), 다음 개인 설정 파일은 그 파일을 포함해야합니다 :

$include /etc/inputrc
set echo-control-characters Off

또 다른 대안은 시스템 전체 구성 파일의 개인 사본을 작성한 다음 수정하는 것입니다.


안녕하세요, 저는이 테스트하고 작업 잘하지만 실행중인 bash는 명령을 중단 할 때 예를 들어, 일 didnt한다 sleep 180하고 Ctrl + C
rɑːdʒɑ

@ Ten-Coin 명령이 불행히도 Readline 라이브러리를 사용하는 경우에만 작동합니다.
Kusalananda

1
~/.inputrc존재하지 않는 경우 단순히 파일을 작성하면 일부 기존 설정이 손실 될 수 있습니다. 필자의 경우 먼저 ctrl + left 및 ctrl + right가 작동을 멈 췄음을 알았습니다. 수정은 ~/.inputrc이 라인 으로 시작하는 것이 었습니다 $include /etc/inputrc. cp /etc/inputrc .inputrc원하는대로 편집하고 편집 할 수도 있습니다 .
kasperd

2
@kasperd 좋은 지적입니다! 개인 구성 파일을 추가하면 시스템 전체 구성 파일을 읽을 수 없다는 것을 알지 못했습니다 (시스템에는 없습니다). 답변을 업데이트하겠습니다.
Kusalananda

20

다음을 시도하십시오 :

stty -echoctl

설명은 참조 에서이 위대한 상세한 포스트 스테판 Chazelas가 일부 다른 설명 stty기능 .

변경 사항을 영구적으로 만들고 싶다면 (그리고 bash질문에 암시 된대로 사용 하고 있다면) 주석 .bashrcjlmg 가 언급 한대로 입력하는 것이 가장 좋습니다 (따라서 모든 대화 형 쉘에 적용됨).


+1 readline 솔루션과 달리 터미널에서 실행되는 모든 것이 아니라면 대부분 작동합니다.
JoL

1
.bash_profile파일이 로그인 쉘에 의해서만 구문 분석되기 때문에 모든 터미널에서 작동하지 않을 것이라고 언급해야합니다 . .bashrc대신 입력해야 하므로 모든 대화식 호출에서 읽습니다.
JoL

1
이것은 여전히 ​​원시 0x03 바이트를 에코하지 않습니까? 이는 이론적으로 일부 터미널에서 해석 될 수 있습니까? 비 읽기 명령을 실행하는 것과 같은 작업을 수행하는 경우에도 부작용이 있습니다. 화살표 키를 누르면 커서가 화면에 표시되지 않고 화면에서 이동합니다.^[[A
Random832

1
@ Random832 +1 당신이 맞아요. 설정 이름이 잘못되었다고 생각합니다. 제어 문자의 에코를 제어하지 않고 에코하기 전에 인쇄 가능한 문자로 변환합니다. 그 부작용을 피하려면 당신도해야합니다 stty -echo. 그것은 물론 다른 모든 것의 에코를 막을 것입니다 ^C.
JoL

1
@jlmg ^C항상 끝났다면 나는 당신과 동의 할 것입니다. 그러나 ^C커서의 어느 위치 에나 인쇄되어 명령의 어느 위치에서나 한 쌍의 문자를 덮어 쓸 수 있습니다. 즉, 해당 명령의 일부를 복사하여 붙여 넣어야 할 경우 엉망이 될 수 있습니다. 그리고 ^C터미널을 살펴볼 때 명령이 끝났을 때처럼 쉽게 인식되지 않습니다.
kasperd 2012 년

2

를 포함하여 정상적인 반향을 허용 echoctl하고 신호 생성 문자의 반향을 침묵 시키는 구성을 찾으려고 노력하고 있다면 이전에 그렇게 작동하는 것을 보았 기 때문에 가능해야합니다 ...

아마 그런 식으로 보았을 것입니다. 그러나이 커밋으로 인해 더 이상 가능하지 않습니다 .

커밋 ec5b1157f8e819c72fc93aa6d2d5117c08cdc961

N_TTY 라인 분야에서 INTR / QUIT / SUSP 에코를 켭니다 (예 : stty echoctl이 설정되고 ctrl-C가 INTR로 설정된 경우 ctrl-C는 "^ C"로 나타남).

리눅스는 유닉스와 같은 유일한 OS 인 것 같습니다 (최근 에이 방법 은 작동 하지 않는 Solaris, BSD 및 Mac OS X에서 이것을 확인했습니다). 콘솔 또는 xterm에서. 나는 수년 동안 내가 사용해온 많은 유닉스들로부터 이것을 좋아한다는 것을 기억합니다. 이것을 리눅스로 가져 오는 것은 표준 유닉스와 같은 행동을 더 잘 준수하는 좋은 방법처럼 보입니다.

리눅스가 어떻게 그것을 반향 하지 않았던 지를 기억한다면 ^C, 이전의 행동을 되 찾는 유일한 방법은 커널을 패치하는 것입니다. 최신 버전에서 신호 생성 문자의 에코는 drivers / tty / n_tty.c의 1215-1218 행에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.