'낮은'출력 색상을 만들려면 어떻게합니까?


25

호출기없이 프로그램 (예 : grep또는 ls) 을 실행하면 출력이 채색됩니다. 그러나 출력을로 파이핑하면 less색상이 표시되지 않습니다.

예를 들어이 명령은 컬러 출력을 출력합니다.

grep -r something

그러나 이것은하지 않습니다 :

grep -r something | less

왜? 어떻게 색상을 볼 수 less있습니까?


5
grep --color=always "search string" * | less -R하지만 most요즘 대신에 사용하는 경향이 있습니다 less. 관련 항목 : gnu.org/software/src-highlite는 컬러 하이 라이터 (이하 작품도)입니다
Rinzwind

@alex 설치 python-pygments했습니까?
souravc 2016 년

@souravc 더 나는 그것을 설치하지 않았다
모하마드 레자 Rezwani

@ales 나를 무시하고 있습니까? >
:-D

답변:


36

여기에는 두 가지 문제가 있습니다.

  • ls색상 지원을 자동 감지하는 것과 같은 명령 은 파이프에서 지원하지 않습니다.
  • less 기본적으로 색상 코드 만 표시하도록 설정되어 있습니다.

둘 다 극복 할 수는 있지만 약간 어색합니다.

ls --color=always | less -R

이것은 ls구체적 이지 않습니다 . 색상을 지원하는 많은 명령에도 재정의 인수가 있습니다.


약간 더 깊이있는 대답은 lsSTDOUT이 실제 터미널에 속하는지 여부를 확인하는 것입니다. 파이프를 연결하면 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 ();

1
오늘 100k 동안 당신을 지원하기위한 나의 마지막 공감 (한도에 도달). 그러나 나와 Rinzwind는 그런 일이 발생하면 케이크를 원합니다.
hytromo 2016 년

이름이 ack-grep 인 프로그램을 다운로드했습니다. ack-grep foo 입력하면 모든 하위 디렉토리에서 foo를 검색합니다. ack-grep foo | 적은, 그리고 색깔은 갔다. 그러나이 프로그램은 "--color = always"를 지원하지 않는 것 같습니다. 도움을 주셔서 감사합니다.
Mohammad Reza Rezwani

1
@alex ack은 다음과 같은 --color주장을하고 있습니다 :ack-grep -i select --color | less -R
Oli

@Oli ......... 세상에 ........ 나는 당신의 지식과 도움과 리눅스의도 힘에 대해 말할 수있는 유일한 것은
모하마드 레자 Rezwani

1
@ B1KMusic 동의합니다. 나는 그것이 어떻게 작동하고 답변을 업데이트 했는지를 알기에 너무 동의합니다 . -C인수를 사용하여 열을 강제 실행할 수 있습니다 .
Oli

2

less보다 일반적으로 색상에 관심이있는 경우를 참조하십시오 lesspipe.sh. 예를 들어 http://freecode.com/projects/lesspipe 를 참조 하십시오 .

lesspipe.sh는 less의 man page에서 설명한대로 pager에 대한 입력 필터입니다. 이 스크립트는 ksh 호환 쉘 (예 : bash, zsh)에서 실행되며 바이너리 컨텐츠, 압축 파일, 아카이브 및 아카이브에 포함 된 파일이있는 파일을 적게 사용하도록합니다.

또한 텍스트 편집기와 유사하게 쉘 스크립트, 펄 스크립트 등을 채색하지만 채색을 위해 "전처리"프로그램을 사용하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.