auto
스위치 옵션이 grep에 어떤 영향을 --color
미치나요? grep은 언제 일치하는 문자열의 색상을 지정하기로 결정하고 언제 결정하지 않습니까?
답변1
예상되는 동작
를 사용하면 --color=auto
grep은 출력이 터미널에 직접 기록되고 해당 터미널이 컬러 출력을 표시할 수 있는 경우에만 일치하는 문자열을 강조 표시합니다.
일반적으로 --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
).