무언가를 통해 파이프 less
하면 프로그램은 일반적으로 TTY로 출력되지 않기 때문에 컬러 코드를 버립니다. 따라서 --color=always
작동하려면 옵션에 추가 해야합니다.
ls -l --color=always | less
grep -R asdf --color=always | less
더 나쁜 것은 때때로 상황이 해당 옵션을 지원하지 않기 때문에 실제로 색상 출력을 파이프에 강제로 적용 할 방법이 없다는 것입니다.
TTY를 에뮬레이션하는 데 상대적으로 쉬운 방법이 --color=always
있습니까?
답변
less
변경할 필요는 없습니다 . 다른 프로그램의 출력이 파이프로 리디렉션됩니다. 이러한 프로그램은 출력이 tty로 전송되지 않고 색상을 비활성화 함을 감지합니다. 파이프로 리디렉션 될 때도 출력을 색칠하기 위해 소스 프로그램에서 특별한 작업을 수행해야합니다.
–color = always 옵션을 지원하지 않는 프로그램에 대한 솔루션이 있다고 생각합니다. 이 unbuffer
명령은 pty를 작성하고 인수 프로그램의 출력을 해당 pty로 전송하므로 인수 프로그램은 해당 출력이 tty로 가고 있다고 생각하여 색상을 지정합니다.
나는 실험으로 다음을 시도해 보았습니다. 기본적으로 출력을 색칠하는 프로그램을 생각할 수 없었습니다.
$ unbuffer ls --color=auto | cat
또한 -r
옵션 을 사용하여 less
색상을 표시 하지 않아도 됩니까? 나는 또한 이것을 시도했다 :
$ unbuffer ls --color=auto | less -r
답변
FreeBSD에서 다음을 수행 할 수 있습니다.
env CLICOLOR_FORCE=yes ls -l | less -R
또는 옵션을 설정 / 재정의 할 수 있습니다 (csh / tcsh).
alias less less -R
setenv CLICOLOR_FORCE yes
setenv LS_COLORS "no=00:fi=00:di=01;36:ln=01;37;44:pi=40;33:so=01;35"
setenv LS_COLORS "$LS_COLORS":"bd=40;33;01:cd=40;33;01:or=40;31;01"
setenv LS_COLORS "$LS_COLORS":"ex=01;32;40:*.tar=01;31:*.tgz=01;31"
setenv LS_COLORS "$LS_COLORS":"*.arj=01;31:*.taz=01;31:*.lzh=01;31"
setenv LS_COLORS "$LS_COLORS":"*.zip=01;31:*.z=01;31:*.Z=01;31"
setenv LS_COLORS "$LS_COLORS":"*.gz=01;31:*.deb=01;31:*.jpg=01;35"
setenv LS_COLORS "$LS_COLORS":"*.gif=01;35:*.bmp=01;35:*.ppm=01;35"
setenv LS_COLORS "$LS_COLORS":"*.tga=01;35:*.xbm=01;35:*.xpm=01;35"
setenv LS_COLORS "$LS_COLORS":"*.tif=01;35:*.mpg=01;37:*.avi=01;37"
setenv LS_COLORS "$LS_COLORS":"*.gl=01;37:*.dl=01;37:*.tex=01;35"
setenv LS_COLORS "$LS_COLORS":"*.ps=01;35"
setenv LS_COLORS "$LS_COLORS":"*.php=01;33"
setenv LS_COLORS "$LS_COLORS":"*.sh=00;31"
setenv LS_COLORS "$LS_COLORS":"*.txt=01;37:*.conf=01;37:*.config=01;37"
setenv LSCOLORS GxExcxdxCxegedabagacad
~ / .cshrc
답변
프로그램에서 isatty
색상 사용 여부를 결정하는 데 사용 하는 경우이를 사용 하는
한 가지 방법은LD_PRELOAD
항상 true를 리턴하는 isatty 버전을 작성하십시오.
echo "int isatty(int x) { (void) x; return 1 ;}" > isatty_override.c
컴파일하고 공유 라이브러리를 작성하십시오.
gcc -c -fPIC isatty_override.c -o isatty_override.o
gcc isatty_override.o -shared -o isatty_override.so
LD_PRELOAD 환경 변수를 사용하여 공유 라이브러리를로드하십시오.
LD_PRELOAD=./isatty_override.so ls -l | less
답변
그러나 pty를 덜 할당 할 수있는 방법은 없으므로 색상을 출력하기 위해 TTY에 의존하거나 수동으로 말할 필요가없는 프로그램. 죄송합니다.
답변
FreeBSD의 Bash 쉘에서 컬러 파이프 작업을 덜 사용하려면 다음을 수행하십시오.
$ export CLICOLOR_FORCE=yes
$ ls -G | less -R
.bashrc
또는에 내보내기 명령을 추가 할 수 있습니다 .bash_profile
.