호출기없이 프로그램 (예 : grep
또는 ls
) 을 실행하면 출력이 채색됩니다. 그러나 출력을로 파이핑하면 less
색상이 표시되지 않습니다.
예를 들어이 명령은 컬러 출력을 출력합니다.
grep -r something
그러나 이것은하지 않습니다 :
grep -r something | less
왜? 어떻게 색상을 볼 수 less
있습니까?
python-pygments
했습니까?
호출기없이 프로그램 (예 : grep
또는 ls
) 을 실행하면 출력이 채색됩니다. 그러나 출력을로 파이핑하면 less
색상이 표시되지 않습니다.
예를 들어이 명령은 컬러 출력을 출력합니다.
grep -r something
그러나 이것은하지 않습니다 :
grep -r something | less
왜? 어떻게 색상을 볼 수 less
있습니까?
python-pygments
했습니까?
답변:
여기에는 두 가지 문제가 있습니다.
ls
색상 지원을 자동 감지하는 것과 같은 명령 은 파이프에서 지원하지 않습니다.less
기본적으로 색상 코드 만 표시하도록 설정되어 있습니다.둘 다 극복 할 수는 있지만 약간 어색합니다.
ls --color=always | less -R
이것은 ls
구체적 이지 않습니다 . 색상을 지원하는 많은 명령에도 재정의 인수가 있습니다.
약간 더 깊이있는 대답은 ls
STDOUT이 실제 터미널에 속하는지 여부를 확인하는 것입니다. 파이프를 연결하면 STDOUT이 다음 명령의 STDIN으로 설정됩니다.
소스 코드 에서ls
이를 확인할 수 있습니다 . 그것은 사용하고 isatty
상황이 무엇인지 작업에 대한 명령 (핵심 POSIX 인터페이스) :
기본적으로 색상이 켜져 있습니까?
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
여러 열로 출력하려고합니까?
if (format == long_format)
format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);
//...
if (isatty (STDOUT_FILENO))
{
format = many_per_line;
set_quoting_style (NULL, shell_escape_quoting_style);
qmark_funny_chars = true;
}
else
{
format = one_per_line;
qmark_funny_chars = false;
}
grep
명시 적으로 재정의되지 않는 한 매우 유사한 작업을 수행하여 isatty
다음 과 같이 색상 지원을 감지합니다 .
color_option = isatty (STDOUT_FILENO) && should_colorize ();
--color
주장을하고 있습니다 :ack-grep -i select --color | less -R
-C
인수를 사용하여 열을 강제 실행할 수 있습니다 .
less
보다 일반적으로 색상에 관심이있는 경우를 참조하십시오 lesspipe.sh
. 예를 들어 http://freecode.com/projects/lesspipe 를 참조 하십시오 .
lesspipe.sh는 less의 man page에서 설명한대로 pager에 대한 입력 필터입니다. 이 스크립트는 ksh 호환 쉘 (예 : bash, zsh)에서 실행되며 바이너리 컨텐츠, 압축 파일, 아카이브 및 아카이브에 포함 된 파일이있는 파일을 적게 사용하도록합니다.
또한 텍스트 편집기와 유사하게 쉘 스크립트, 펄 스크립트 등을 채색하지만 채색을 위해 "전처리"프로그램을 사용하지 않습니다.
grep --color=always "search string" * | less -R
하지만most
요즘 대신에 사용하는 경향이 있습니다less
. 관련 항목 : gnu.org/software/src-highlite는 컬러 하이 라이터 (이하 작품도)입니다