2008-09-23 3 views
18

내 터미널에 여러 개의 이진 데이터를 덤프 한 후 왜 내 키 입력이 이상한 문자로 바뀌는가?

$ cat /bin/ls 

를 터미널에 넣으면 왜 ls 실행 파일을 나타내는 많은 바이너리 데이터를 볼 수 있는지 이해할 수 있습니다. 하지만 나중에, 내가 다시 프롬프트를 얻을 때, 내 자신의 키 입력이 미친 것처럼 보입니다. 나는 "a"라고 입력하면 이상한 대각선이 생깁니다. 나는 "b"를 입력하고 나는 학위 기호를 얻는다.

왜 이런 일이 발생합니까?

+1

[이 링크] (http://bbs.archlinux.org/viewtopic.php?pid=423358#p423358)에는 지금까지 본 최고의 답변이 있습니다. – raldi

답변

3

제어 문자가 셸로 파이프되어 동작을 변경하고 다르게 인쇄하도록 셸에 지시하고 있습니다.

43

바이너리 데이터의 어딘가에는 터미널에서 요청한 것으로 해석되는 제어 시퀀스 (예 : 그리기에 사용 된 문자 집합 변경)가 있었기 때문입니다.

reset 
2

VT100 거의 터미널 창에 사용되는 표준 명령 집합이지만, 확장 많이있다 : 당신은 너무처럼 모든 것을 정상으로 복원 할 수 있습니다. 일부 제어 문자 세트 사용, 키보드 매핑 등

이러한 터미널에 많은 양의 이진 문자를 보내면 많은 설정이 변경됩니다. 일부 터미널에는 설정을 기본값으로 되돌릴 수있는 옵션이 있지만 일반적으로 이진 데이터로 만들어지지 않았습니다.

VT100과 그 후계자는 Linux가 간단한 터미널 프로그램에서 컬러 텍스트 (예 : 컬러 ls 목록)로 인쇄 할 수있게합니다.

당신이 정말로 터미널에 이진 데이터를 덤프해야하는 경우

-1

-Adam, 당신은 훨씬 더 행운이있을 것이다 약간 더 읽기 쉬운 형식으로 표시됩니다 less 같은 호출기에 당신이 파이프를 경우. (stringsod 모두 이진 파일을 둘러 보면서 유용 할 수 있습니다.)

+0

이것은 "이유"에 대한 대답이 아니므로 질문에 대한 주석이어야합니다. – tzot

3

터미널은 제어 코드로 던져진 이진 데이터를 해석하려고 시도 할 것이고 스스로 문질러 듭니다 과정에서, 그래서 당신은 당신의 tty를 위생해야합니다.

실행 :

stty sane 

그리고 상황이 정상으로 돌아해야합니다. 명령을 입력 할 때 명령이 왜곡되어 보이더라도 실제 문자가 올바르게 저장되고 return 키를 누르면 명령이 호출됩니다.

stty 명령 here에 대한 자세한 정보를 찾을 수 있습니다. bash는 문자에

echo -e '\017' 

정상으로 반환합니다

11

은 그냥 복사 - 붙여 넣기를 할.

<Ctrl-V><Ctrl-O><Enter> 

을하고 그것 중 하나 < Ctrl 키-V> < Ctrl 키-O> 찾을 수 없다는 불평 할 때 희망 터미널의 상태는 정상으로 돌아갑니다 : 당신이 떠들썩한 파티를 실행하지 않으면, 다음 키 입력을 시도 또는 < Ctrl-O> 명령을 실행하십시오.

< Ctrl-N> 또는 문자 14 - 사용자의 단말기로 보낼 때 - 주문하면 문자와 숫자가 기호로 대체되는 특수 그래픽 모드로 전환됩니다. < Ctrl-O>, 또는 문자 15는 다시 정상으로 복원합니다.