`less` 또는 `more`는 ansi 이스케이프 `\x1b[2K`(erase_line)를 지원합니까?

`less` 또는 `more`는 ansi 이스케이프 `\x1b[2K`(erase_line)를 지원합니까?

기본적으로 터미널에 애니메이션을 적용하고 싶지만 텍스트가 너무 길어서 호출기가 필요합니다. 텍스트 색상을 주기적으로 변경하고 싶다고 가정해 보겠습니다. 가능합니까?

답변1

편집하다답변폰브랜드그리고토마스 디키기술적으로 더 정확합니다.

less-r옵션이 사용될 때 원시 ANSI 이스케이프를 지원합니다 . 또한 삭제(Erase in line)도 지원합니다.

하지만 애니메이션은 볼 수 없습니다. 예를 들어:

echo -e "foo\x1b[1G\x1b[2Kbar" > test.ansi
less -r test.ansi

인쇄만 됩니다 bar.

more기본적으로 ANSI 이스케이프를 전달하지만 내가 테스트한 내용의 줄 편집을 지원하지 않습니다.

또한보십시오less, more및 의 차이점에 대한 이 Stackoverflow 답변most.

답변2

라인 지우기는 터미널 색상 변경과 간접적인 관계만 가집니다.배경색상을 선택하면 많은 터미널(Linux 콘솔, rxvt, xterm 및 이들 중 하나를 모방하는 프로그램)이 해당 색상을 사용하여 배경의 지워진 영역에 색상을 지정합니다.

less몇 가지 지우기 작업을 사용하지만 \x1b[2K. 읽기원천, termcap 인터페이스를 사용하여 여러 기능을 사용합니다. 가장 관련성이 높은 부분은 다음 항목에 설명되어 있습니다.용어정보(5)매뉴얼 페이지:

   clr_bol                   el1    cb   Clear to beginning
                                         of line
   clr_eol                   el     ce   clear to end of line
                                         (P)

\x1b[K즉 , 및 , 각각 \x1b[K에 대한 것입니다 . 기존의 termcap 기능은 없으며 ( 또는 옵션 을 사용하여 파일 내용을 통과하도록 지시 하지 않는 한 ) .el1elel2less-r-Rless\x1b[2K

more예를 들어 에서와 같이 에서도 마찬가지입니다 .util-linux패키지: termcap의 기능만 사용합니다. 와 달리 에는 less인쇄 more할 수 없는 문자를 터미널에 직접 보내는 옵션이 없습니다.

-ror 옵션 을 사용하는 경우에는 다음과 같은 점을 명심해야 합니다.-Rless제한된: less이스케이프가 무엇을 하는지 알지 못합니다(또는 크게 신경 쓰지 않습니다). 로부터매뉴얼 페이지:

-r또는--raw-control-chars
원인"날것의"표시할 제어 문자. 기본값은 캐럿 표기법을 사용하여 제어 문자를 표시하는 것입니다. 예를 들어 컨트롤 A(8진수 001)는 "^A"로 표시됩니다. 경고: -r 옵션 사용시less 할 수 없다화면의 실제 모양을 추적하십시오(각 제어 문자 유형에 화면이 어떻게 반응하는지에 따라 다르기 때문입니다). 따라서 긴 줄이 잘못된 위치에서 분할되는 등 다양한 표시 문제가 발생할 수 있습니다.

답변3

이스케이프 시퀀스에 반응하는 것은 일반적으로 tty입니다(실행 중인 프로그램이 이를 따르지 않도록 설정하지 않는 한, 프로그램 자체가 그렇게 할 수 있습니다). more(1)다소 원시적인 화면 재작성을 수행하므로(화면 길이 줄을 작성하고 키 누르기를 기다리는 것만으로도 충분합니다) 입력을 통과하는 것 같아요. less(1)백업이 필요하므로 화면에 대한 보다 세밀한 제어가 필요합니다.

관련 정보