.bashrc
방금 컬러 출력을 얻기 위해 이것을 내 항목에 추가했습니다 less
.
# Colorize less man pages.
export LESS_TERMCAP_md=$'\e[01;34m'
export LESS_TERMCAP_us=$'\e[01;33m'
export LESS_TERMCAP_so=$'\e[01;44;37m'
export LESS_TERMCAP_mb=$'\e[01;31m'
export LESS_TERMCAP_mr=$'\e[01;35m'
export LESS_TERMCAP_me=$'\e[00m'
export LESS_TERMCAP_ue=$'\e[00m'
export LESS_TERMCAP_se=$'\e[00m'
...이제 갑자기 특정 명령(환경 변수 표시와 관련이 있는 것으로 보임)이 이러한 새로운 설정과 일치하는 색상 출력을 생성합니다. 제가 탈출을 잘못한 걸까요? 아니면 의도적인 행위일까요? 다른 이스케이프 변형을 시도했지만 작동하지 않습니다 less
.
예를 들어 다음은 env
명령의 스크린샷입니다.
php -i
컬러 출력도 있지만 환경 변수 섹션에만 해당됩니다.
답변1
이는 정상적인 동작입니다. 이러한 환경 변수에는 터미널의 전경색을 변경하게 하는 이스케이프 시퀀스가 포함되어 있습니다. 어떤 프로그램에서든 출력할 less
때 env
.
이러한 변수에는 실제 이스케이프 문자가 포함되어야 하며 less는 사후 처리를 수행하지 않습니다.
일반적으로 프로그램에 더 적은 수의 구성 변수를 넣을 수 있습니다.더 적은 키 파일LESS_TERMCAP_xx
, 그러나 lesskey 파일을 읽기 전에 less가 변수를 읽기 때문에 변수에는 작동하지 않습니다 (less 444로 시작). 따라서 환경에 투입하는 것 외에는 선택의 여지가 없습니다.
man
이러한 변수를 다른 목적 으로만 사용하려면 별칭을 사용하여 환경 변수를 설정하는 래퍼 스크립트에 변수를 설정할 less
수 있습니다 .man
PAGER
#!/bin/sh
escape=␛ # a literal escape character
export LESS_TERMCAP_md=$escape'[01;34m'
…
exec less "$@"
(또는 #!/bin/bash
첫 번째 줄에 를 사용하여 #'\e'
구문을 사용하여 이스케이프 문자를 얻을 수 있습니다. /bin/sh
대시가 있는 시스템 에서는 /bin/sh
실제로 눈에 띄지 않을 수도 있지만 대시가 있는 시스템에서는 약간 더 빠릅니다.)
이 스크립트를 호출하여 또는 에 less-color
추가하십시오 . 일부 시스템에서는 별칭을 만드는 대신 에서 환경 변수를 설정하여 다른 호출기를 사용하도록 나타낼 수 있습니다 .alias man='PAGER=less-color man'
~/.bashrc
~/.zshrc
man
MANPAGER
export MANPAGER=less-color
~/.profile
답변2
백슬래시 뒤에 e가 포함된 문자열이 아니라 실제 이스케이프 문자가 포함된 문자열로 이러한 LESS_* 변수의 값을 실수로 설정했다고 가정합니다. 따라서 이 값이 표시될 때마다 단말기의 색상이 변경됩니다.
나는 당신이 .bashrc에 지정한 설정을 주의 깊게 살펴보고 그것이 올바른지 확인하겠습니다. 나는 당신이해야 할 일은 달러 기호를 제거하는 것 뿐이라고 생각합니다.
답변3
@Gilles가 그의 답변에서 지적했듯이 이는 예상되는 동작입니다.
커플 정보를 추가하겠습니다.
LESS_TERMCAP_xx
TERMCAP 기능을 재정의합니다. 이 재정의는 less
자체적으로 관리되며 screen.c
해당 값은 나중에 TERMCAP 라이브러리에서 반환된 것처럼 사용됩니다. 이는 제어 문자의 원시 시퀀스여야 함을 의미합니다.
이 문제를 "수정"하는 방법에 대한 내 계정은 less
자체 포장 되어 있습니다.
$ cat ~/bin/less
#!/bin/bash
# Start bold mode
export LESS_TERMCAP_md=$'\e[1;37m'
# Start standout mode
export LESS_TERMCAP_so=$'\e[1;37;41m'
# End standout mode
export LESS_TERMCAP_se=$'\e[0m'
# Start underlining
export LESS_TERMCAP_us=$'\e[4;93m'
# End underlining
export LESS_TERMCAP_ue=$'\e[0m'
# End all mode like so, us, mb, md and mr
export LESS_TERMCAP_me=$'\e[0m'
exec /usr/bin/less "$@"