"head /bin/ls"가 터미널을 재설정하는 이유는 무엇입니까?

"head /bin/ls"가 터미널을 재설정하는 이유는 무엇입니까?

같은 어리석은 짓을 하면 cat /var/log/wtmp스크린샷처럼 터미널이 복잡해질 수 있습니다. 나는 많은 방법이 있다는 것을 안다.이 문제를 해결하다. 몇 년 전에 들었던 기사에서 언급되지 않은 방법 중 하나는 스크린샷의 빨간색 상자에 강조 표시된 명령을 실행하는 것입니다.

head /bin/ls

이것은 작동합니다.

왜?

터미널 재설정 스크린샷

답변1

터미널은 표시할 문자 데이터와 함께 전송된 이스케이프 시퀀스에 의해 제어됩니다. 예를 들어, 이것은 echo -e '\e[34m'많은 터미널의 텍스트를 파란색으로 바꾸는 방법입니다 . 일부 문자를 터미널로 다시 에코합니다. 이는 전경색을 설정하는 이스케이프 시퀀스입니다.

일부 대체 문자 집합(및 아마도 그 이상)으로 전환하라는 지시를 받아 터미널이 엉망이 되었습니다. /var/log/wtmp문자 집합을 전환하기 위한 이스케이프 시퀀스가 ​​포함되어 있기 때문에 이렇게 합니다 . 기술적으로는 그다지 지저분하지 않습니다. 설계된 대로 정확하게 작동합니다. ( tput smacs필요에 따라 터미널을 조작해 보십시오. tput rmacs이 매개변수를 다시 변경하십시오.)

reset이스케이프 시퀀스를 전송하여 다양한 매개변수를 기본값으로 재설정하는 것과 같은 기능입니다. 이렇게 하면 터미널이 "수정"됩니다.

head /bin/ls트릭은 귀하 /bin/ls(또는 적어도 의 인쇄된 부분 head)에 터미널 매개변수를 다시 변경하는 이스케이프 시퀀스가 ​​포함되어 있기 때문에 작동합니다. 이것은 전혀 이식성이 없습니다. 예를 들어 여기서는 작동하지 않습니다. 그리고 기본값을 재설정하는 것은 아마도 reset기다리는 것보다 훨씬 더 과감한 작업일 것입니다. )

답변2

실제로 그림에는 윤곽선이 표시되지 않습니다. 달리기 reset(보통)가 도움이 됩니다.저것. 또한 reset고정 터미널 모드는 다음보다 더 안정적입니다 stty sane.

  • 이렇게 하면 stty sane에코 및 캐리지 리턴과 관련된 터미널 모드 문제가 해결됩니다.유닉스또는 와 같이 사용자가 원하지 않는 값으로 삭제 문자를 설정하는 플랫폼(즉, AIX, HPUX 및 Solaris) ^?.#^H
  • reset명령(적어도 ncurses에서 제공하는 명령)은 이러한 설정을 개선하고 터미널 초기화 문자열을 보냅니다. 저것대개대체 문자 집합을 재설정합니다(그러나 일부 터미널은 다를 수 있습니다. 이는 Unix 터미널 설명에서 간과되는 기능이기 때문입니다).

만약 너라면가지다선 그리기 문자를 표시합니다. 이러한 문자는이사하다제어 문자(이스케이프 시퀀스 아님):

SO        Shift Out (Ctrl-N) -> Switch to Alternate Character Set.  This
          invokes the G1 character set.

제가 만든 선 그리기 캐릭터의 스크린샷은 다음과 같습니다.

ls
tput smacs
ls -l

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

때때로 누군가가 바이너리 쓰레기와 선으로 그린 ​​문자가 혼합된 그림을 표시하지만 이 질문이나 다른 언급된 (ab) 질문에서는 해당 기능을 사용하지 않습니다. 반대로 그들은밝히다두 가지 다른 기능이 있습니다:

  • 모든 문자를 인쇄할 수 있는 것은 아닙니다(그림의 큰 공백을 고려).
  • 일부 바이트 시퀀스는 합법적인 UTF-8을 형성하지 않으며 터미널 에뮬레이터에 의해 특수 마커와 함께 표시됩니다.유니코드 대체 문자.

추가 자료:

관련 정보