grep 스위치 --color=auto는 무엇을 합니까?

grep 스위치 --color=auto는 무엇을 합니까?

auto스위치 옵션이 grep에 어떤 영향을 --color미치나요? grep은 언제 일치하는 문자열의 색상을 지정하기로 결정하고 언제 결정하지 않습니까?

답변1

예상되는 동작

를 사용하면 --color=autogrep은 출력이 터미널에 직접 기록되고 해당 터미널이 컬러 출력을 표시할 수 있는 경우에만 일치하는 문자열을 강조 표시합니다.

일반적으로 --color=auto당신이 원하는 것입니다. 예를 들어, grep을 사용하여 URL을 일치시키고 이를 Wget으로 파이프하면 Wget은 \e[1;31mhttp://...실제 URL 대신 볼 것입니다.

다음 명령을 실행하면 컬러 출력이 표시됩니다.

echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat

그러나 이 명령은 다음과 같으면 안 됩니다.

echo Super User | grep --color=auto Super | cat

이 동작에 대한 모든 불일치는 버그로 간주되어야 합니다.

소스 코드

으로 --color=auto최신Windows용 그렙버전(2.5.4) – 기반이 되는 원본 2.5.4뿐만 아니라 – 조건이 충족되는 경우에만 출력 색상을 지정합니다.

isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")

즉, 출력이 터미널에 기록되는 경우에만환경 변수TERM정의되었지만 터미널이 정의되어 있지 않습니다.멍청한.

일반적으로 정의되지 않으므로 Windows에서는 원하는 동작이 생성되지 않습니다 TERM. 이 문제에 대한 쉬운 해결책은 TERM=windows제어판에서 를 설정하는 것입니다.

최신 버전의grep(2.14)는 조건이 다음과 같은 경우에만 출력에 색상을 지정하여 이 문제를 해결합니다.

isatty(STDOUT_FILENO) && should_colorize()

should_colorize()POSIX와 Win32에 대해 다르게 정의된 경우는 true입니다 .

전자의 경우 조건은 2.5.4의 조건과 동일합니다. 후자의 경우 환경 변수를 TERM설정할 필요가 없습니다(그냥 설정할 수는 없습니다 dumb).

관련 정보