!["head /bin/ls"가 터미널을 재설정하는 이유는 무엇입니까?](https://linux55.com/image/87008/%22head%20%2Fbin%2Fls%22%EA%B0%80%20%ED%84%B0%EB%AF%B8%EB%84%90%EC%9D%84%20%EC%9E%AC%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
같은 어리석은 짓을 하면 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을 형성하지 않으며 터미널 에뮬레이터에 의해 특수 마커와 함께 표시됩니다.유니코드 대체 문자.
추가 자료: