다른 프로세스로 파이프할 때 내 ANSI 이스케이프 코드는 어디로 가나요? 보관할 수 있나요?

다른 프로세스로 파이프할 때 내 ANSI 이스케이프 코드는 어디로 가나요? 보관할 수 있나요?

예를 들어 때로는 프로세스의 색상으로 구분된 출력을 파이프하고 싶을 때가 있습니다. grep...하지만 다른 프로세스로 파이프할 때, 예를 들어. sed, 색상 코드가 누락되었습니다...

이 코드를 그대로 유지할 수 있는 방법이 있나요?

다음은 컬러 출력이 누락된 예입니다.

echo barney | grep barney | sed -n 1,$\ p   

답변1

컬러 출력을 생성하는 많은 프로그램은 TTY에 쓰고 있는지 여부를 감지하고 그렇지 않은 경우 컬러를 끕니다. 이는 텍스트만 캡처하려는 경우 색상 코드가 귀찮아서 자동으로 "올바른 일을 수행"하려고 하기 때문입니다.

이러한 프로그램에서 색상 출력을 캡처하는 가장 쉬운 방법은 TTY에 연결되어 있지 않더라도 색상을 쓰도록 지시하는 것입니다. 이 옵션이 있는지 알아보려면 프로그램 설명서를 읽어야 합니다. (예를 들어 옵션이 grep있습니다 --color=always.)

당신은 또한 사용할 수 있습니다expect스크립트unbuffer다음과 같이 의사 tty를 만듭니다.

echo barney | unbuffer grep barney | sed -n 1,$\ p

답변2

이것은 나에게 효과적이었습니다 ;-! (현재 MingW 환경에서)

echo barney | grep --color=always barney | sed -n '1,$p'
**barney**

# Barney는 빨간색 텍스트로 표시됩니다.

$ grep --version
GNU grep 2.5.4

$ sed --version
GNU sed version 4.2.1

관련 정보