Zypper의 --no-color 옵션이 무시되는 원인을 파악하는 데 도움이 필요합니다.

Zypper의 --no-color 옵션이 무시되는 원인을 파악하는 데 도움이 필요합니다.

내보낼 때 zypper --no-color update -y여전히 ANSI 코드를 볼 수 있습니다. 다음은 로그의 예입니다.

Retrieving package glibc-extra-2.31-150300.41.1.x86_64                                                                  (11/460),  64.6 KiB( 27.7 KiB unpacked)
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm --------------------------------------------------------------------------------------------------[starting]
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm ---------------------------------------------------------------------------------------------[\ (1.1 KiB/s)]
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm ..........................................................................................[done (1.1 KiB/s)]
Retrieving package gtk3-data-3.24.34-150400.3.3.1.noarch                                                                (12/460), 111.5 KiB(  7.3 KiB unpacked)
←[2K

빈 줄에만 ANSI 코드가 포함되어 있다는 점은 주목할 가치가 있습니다. 이 --no-color옵션이 없으면 각 줄의 시작과 끝 부분에 더 많은 내용이 포함됩니다.

모든 ANSI 코드를 완전히 제거하려면 어떻게 해야 합니까?

답변1

zypper유틸리티는 사용하면 안 됩니다.어느터미널이 "멍청한 터미널"( TERM=dumb)이거나 출력이 비 터미널로 리디렉션되는 경우 ANSI 이스케이프입니다. 불행하게도 "로그"를 생성하는 방법은 명확하지 않습니다. 관련 정보로 질문을 업데이트해 주시기 바랍니다.

아래 답변에서는 귀하의 버전에 문제가 있다고 가정 zypper하고 비 터미널에 출력을 쓰지 않는다는 사실을 무시하고 있습니다.


\033[2K탈출이 사용되기 때문에현재 행 삭제( EL색상에 관계없이 "줄 지우기" 코드) 어떤 출력을 얻고 싶은지 완전히 명확하지 않습니다. 이스케이프 문자를 제거하면 줄의 문자가 지워지지 않은 상태로 남을 수 있기 때문입니다.

\033[2K이스케이프를 제거하려면 다음과 같은 것을 사용하십시오.

e2k=$( printf '\033[2K' )
your command | sed "s/$e2k//g"

이 이스케이프 시퀀스가 ​​포함된 빈 줄(출력 줄의 모든 항목도 제거됨)뒤쪽에이스케이프 코드):

e2k=$( printf '\033[2K' )
your command | sed "s/.*$e2k.*//"

커서는 이동 되지 \033[2K않으므로 보다 복잡한 접근 방식에서는 현재 커서 위치를 계산하고 해당 지점까지의 줄만 지워야 합니다.

당신은 할 수모든 ANSI 코드 제거, 그러나 그 중 일부는 커서 위치 지정과 같은 작업에 사용되므로 각 코드에 대해 대체할 내용을 지정해야 합니다. 그렇지 않으면 더 왜곡되고 이해하기 어려운 텍스트 파일이 될 수 있습니다. 이 경우 관심을 갖는 유일한 코드는 이 답변에 언급된 코드입니다.

관련 정보