ls 또는 tree의 출력을 less로 파이프하면 색상이 손실됩니까?

ls 또는 tree의 출력을 less로 파이프하면 색상이 손실됩니까?

tree그리고 ls파일 이름을 다르게 색칠하여 파일 형식을 구별할 수 있습니다.

tree그리고 ls종종 긴 파일 목록(디렉터리 포함)을 출력하므로 stdout 출력을 less.

그러나 less색상은 유지되지 않습니다. 어떻게 색상을 표시할 수 있나요? 아니면 다른 방법이 있나요?

방금 연결된 목록을 보았지만 파이핑 less -R또는 less -r작동하지 않습니다. 내 운영 체제는 Ubuntu 12.04입니다. less버전 444: 2011년 6월 9일.

답변1

나는 당신이 "자동" 모드에서 색상을 사용하도록 ls --color=auto지시하는 를 사용하고 있다고 가정합니다. ls"자동" 모드는 lsSTDOUT이 터미널인지 확인하고, 그렇다면 색상을 사용하고, 그렇지 않으면 색상을 사용하지 않음을 알려줍니다. ls에 파이프를 연결하면 lessSTDOUT은 터미널이 아니고 less일반 파이프인 STDIN에 연결됩니다.

해결 방법 ls --color은 또는 ls --color=always.

이제 이는 또 다른 잠재적인 문제로 이어집니다. 귀하의 경우에 따라 less색상이 표시되지 않고 이스케이프 코드가 표시될 수도 있습니다. 해결책은 를 사용하는 것입니다 less -R. 이는 lessANSI 색상 이스케이프에 대한 이스케이프 코드를 전달하도록 알려줍니다. -rless는 줄 길이를 올바르게 계산할 수 없기 때문에 긴 줄 바꿈에 문제가 발생할 수 있으므로 사용하고 싶지 않습니다 .

이러한 완벽한 솔루션은 다음과 같습니다.

ls --color | less -R

동일 tree:

tree -C | less -R

관련 정보