ls 명령에 대한 컬러 출력이 적습니다.


21

내가 실행 ls하면 컬러 출력이 생겨서 일종의 파일을 빠르게 볼 수 있습니다. 나는에 파이프 그것을 시도 할 때 less조차와 -r-R에 플래그는 항상 분실 색칠. 나는 사용하고 zsh버전 5.0.7을. 어떤 아이디어? 감사.

편집 : 나는 OS X에 있습니다.


ls로 호출되고 있는지 확인할 수 있습니까 --color? 파이프 라인을 일시 중단 ( ^Z)하거나 ps다른 터미널에서 사용하십시오 . 어떤 산출물이 which ls생산됩니까?
zackse

OP가 사용 중이라고 명시 했으므로 닫기 대기열에서이 less -r문제를 해결 lessls
했으므로

나는 이것이 복제본이 아니라는 것에 놀랐지 만, 내가 찾을 수있는 가장 가까운 것은 명령 출력을 variable저장하는 것이었고 , 그것은 슈퍼 유저에 있습니다.
Scott

@Scott 정확한 사본이 있는지 확실하지 않지만 답변이 매우 유사한 몇 가지 질문이 있습니다 ( ls결과는 stdout에 따라 다름). 내가 기억하는 것은 unix.stackexchange.com/questions/157285/… 입니다. 이것 자체는 unix.stackexchange.com/questions/10421/…
jimmij

@jimmij 그러나 이러한 질문은 ls --color=auto파일이나 파이프가 아닌 터미널에 쓸 때만 (즉, 표준 출력이 터미널 일 때) 색을 사용 한다는 것을 언급하지 않습니다 .
Scott

답변:


21

이것은 의도적으로 설계된 것입니다. 컬러 출력을 생성하는 프로그램은 일반적으로 출력이 파이프 나 일반 파일로 전송 될 때가 아니라 터미널로 출력 될 때에 만 수행됩니다. 그 이유는 터미널에서 전송 된 데이터는 아마도 사람에 의해 읽히는 반면 프로그램에 파이프되거나 파일에 기록 된 데이터는 일부 프로그램에 의해 구문 분석 될 가능성이 높기 때문에 색상이 바뀌는 이스케이프 시퀀스와 같은 관련없는 내용을 포함해서는 안됩니다 .

ls옵션 --color(또는 --color=auto) 을 전달하면 GNU 가 터미널에 컬러 출력을 표시합니다 . 표준 출력의 파일 유형에 관계없이 컬러 출력을 강제하려면 --color=always또는 --color=yes(동의어)를 전달하십시오. 이 규칙에는 GNU grep, FreeBSD grep 등과 같은 다른 명령이 이어졌습니다 git diff.

ls --colors=yes -l | less

FreeBSD 버전 ls(OSX에도 colorls있으며 OpenBSD 및 NetBSD 에서 포트 로 사용 가능)을 사용 -G하여 출력이 터미널 일 때 색상을 표시 하는 옵션 을 전달하십시오 . CLICOLOR_FORCE출력 파일 형식에 관계없이 색상이 표시 되도록 환경 을 설정하십시오 .

CLICOLOR_FORCE=1 ls -l | less

20

문제는 아마도 ls프로그램에 옵션이 설정되어 있다는 것입니다. --color=auto기본적으로 출력은 터미널에 연결되어있는 경우에만 색상을 지정해야하며 그렇지 않으면 (파이프 또는 파일에 연결된 출력) 색상이 방출되지 않습니다.

그런 경우에 색상을 원한다면 --color옵션을로 설정해야 always합니다.

ls --color=always | less -R

이 동작이 항상 예상되는 경우 별명을 작성하십시오.

alias ls='ls --color=always'

내 설정에서 bash 버전 4.3, --color는 잘못된 옵션입니다. "color"를 grepping하면 "-G"옵션에 대해 알려주지 만 auto 또는 always 옵션에 대해서는 아무 것도 말하지 않습니다. 어떤 아이디어?
nunos

5
@nunos ls는에서 온 것이 아니라 bash독립형 프로그램입니다. ls --version버전을 확인하려면 실행하십시오 . 내 것은 ls GNU coreutils) 8.21 입니다.
jimmij

@jimiij 내 ls버전에는 --version깃발 이 없습니다 . OS X의 기본 설정을 사용하고 있는데 이것이 도움이되는지 확실하지 않습니다.
nunos

@nunos 항상 운영 체제를 언급하십시오. Linux와 OSX와 같은 GNU 이외의 인텔 사이에는 큰 차이가 있습니다.
terdon

0

나는 50 개 미만의 담당자가 있기 때문에 @jimmij의 답변에 대해서는 언급 할 수 없지만 Bash에서 저에게 효과가 있었던 것을 설명하고 싶습니다.

당신이 실행하는 경우

$ man ls | grep color

man특정 쉘 환경 에 대한 페이지 의 모든 항목이 표시 됩니다 (이 경우 bash).

나를 위해 다음 조정이 트릭을 수행했습니다.

$ alias ls='ls -G'

3
그것은 무엇을 위해 일했습니까? -G플래그는 방법과는 아무 상관이없는 ls색깔의 출력을 관리합니다. 그냥의 출력에서 ​​그룹을 제거합니다 ls -l. BSD ls (OSX에서도 사용되는 색상)의 색상 출력에 영향을 미칩니다. 어쨌든 파일로 리디렉션 할 때 색상이 표시되지 않는다고 생각합니다. 명령 줄에 색상 만 표시됩니다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.