bash 터미널을 일관되게 중단하는 올바른 방법은 무엇입니까?

bash 터미널을 일관되게 중단하는 올바른 방법은 무엇입니까?

저는 OSX 10.11.1을 사용하고 있는데 가끔 bash 터미널이 손상되는 경우가 있습니다. 실수로 바이너리 파일을 사용할 때 cat이런 일이 자주 발생합니다 . 결과는 아래와 같습니다. 출력이 이상해져서 더 이상 ASCII 문자를 입력할 수 없습니다.

여기에 이미지 설명을 입력하세요.

가끔 이런 일이 발생하지만 문제를 일관되게 재현할 수 있는 방법을 찾을 수 없습니다. 온라인 검색에서는 이 방법을 제안했지만 cat /bin/*수십 번 시도한 후에는 가끔씩만 작동했습니다.

저는 이 문제를 해결할 수 있는 간단한 해결책을 찾기 위해 이렇게 하고 싶습니다 tmux.

Bash를 "깨진" 상태로 유지하려면 어떻게 해야 합니까? 이를 수행할 수 있는 마법의 유니코드 문자가 있습니까?

답변1

이것은 다음과 같습니다DEC 특수 그래픽 문자 세트.

독서xterm 제어 순서 문서, 터미널이 을 수신할 때 이를 사용하는 것 같습니다 ESC ( 0.

그래서 당신은 사용할 수 있어야합니다

printf '\033(0'

또는

printf '\033(0' > corrupt-my-terminal
cat corrupt-my-terminal

그리고 다시 사용

printf '\033(B'

동일한 페이지에 따라 USASCII를 선택하십시오.


상태를 복원하는 다른 방법은 다음과 같습니다.

tput sgr0  # resets all terminal attributes to their defaults

그리고

reset      # reinitializes the terminal

tput sgr0( bash PROMPT_COMMAND) 또는 (zsh) precmd에서 항상 자동으로 재설정 되도록 할 수 있습니다 .


또는 파일을 보는 것 외에 이나 less다른 옵션을 사용할 수도 있습니다 .vimcat

less유사하게 동작 하고 cat파일 길이가 한 페이지 미만일 때 자동으로 종료하려면 실행 less -FX하거나 do 를 실행하십시오 export LESS=-FX.

또는 이러한 옵션을 항상 사용하지 않으려면 less새 별칭을 만드세요.

alias c='less -FX'

답변2

VT100 에뮬레이터에서 그래픽 문자 세트가 실수로 선택되는 가장 일반적인 방법은 문자를 수신하는 것입니다( Control-N이동이라고도 함). 바이너리 파일을 캡처하고 그 안에 값이 "\14"인 바이트가 있는 경우 터미널 에뮬레이터가 그래픽 문자 집합으로 변환될 수 있습니다. 문자가 수신 Control-O되거나 이동되면(또는 터미널의 제어 순서를 재설정하여) 취소됩니다 . 이는 bash나 터미널 에뮬레이터에서 실행될 수 있는 다른 셸과 독립적입니다.

터미널 에뮬레이터 내에서 실행되는 터미널 에뮬레이터의 경우 의미 체계가 약간 복잡할 수 있습니다. 예를 들면 이렇습니다.화면받아 들여:

화면의 터미널 에뮬레이션은 터미널 호출 화면의 termcap 항목에 부울 "G0" 기능이 있는 경우 여러 문자 세트를 지원합니다. 이를 통해 응용 프로그램은 VT100 그래픽 문자 집합이나 국가별 문자 집합 등을 사용할 수 있습니다. ISO 2022에서 다음 제어 기능을 지원합니다: "잠긴 변속 G0"("SI"), "잠긴 변속 G1"("SO"), "잠긴 변속 G2", "잠긴 변속 G3", "단일 변속 위치 G2", 그리고 "싱글 클래스 G3". 가상 터미널을 생성하거나 재설정할 때 ASCII 문자 집합은 "G0"부터 "G3"까지 지정됩니다. "G0" 기능이 있으면 화면은 "S0", "E0" 및 "C0"(있는 경우) 기능을 평가합니다. "S0"은 "SI"가 아닌 그래픽 문자 집합을 활성화하고 시작하기 위해 터미널에서 사용하는 시퀀스입니다. "E0"은 "SO"를 대체합니다. 'C0'은 세미 그래픽 모드에서 사용되는 문자별 번역 문자열을 제공합니다.

답변3

비슷한 상황에서 Bitvise SSH 클라이언트를 사용해도 터미널이 일반 디스플레이로 복원되지 않았고 reset일반 디스플레이를 복원하는 데도 도움이 되지 않았습니다.tput sgr0

0x0E몇 가지 조사 끝에 문제의 캐릭터를 ( SHIFT OUT) 로 찾아냈습니다 .

블라인드 에코 0x0F( )로 SHIFT IN해결 했습니다.

echo -e '\x0f'

관련 정보