~/.profile에 배치할 때 LESS_TERMCAP 설정이 작동하지 않는 이유는 무엇입니까?

~/.profile에 배치할 때 LESS_TERMCAP 설정이 작동하지 않는 이유는 무엇입니까?

다음과 같은 LESS_TERMCAP 설정이 있습니다.

# less config
export LESS=-R         
export LESS_TERMCAP_mb=$'\E[01;31m' # begin blinking
export LESS_TERMCAP_md=$'\E[01;31m' # begin bold    
export LESS_TERMCAP_me=$'\E[0m' # end mode          
export LESS_TERMCAP_se=$'\E[0m' # end standout-mode
export LESS_TERMCAP_so=$'\E[01;44;37m' # begin standout-mode
export LESS_TERMCAP_ue=$'\E[0m' # end underline
export LESS_TERMCAP_us=$'\E[01;33m' # begin underline
export LESSOPEN='| /usr/bin/highlight -O ansi %s 2>/dev/null'

~/.profile청중이 적어 지면 완전히 혼란스러워집니다. 반면에 를 입력하면 ~/.zshrc작동 zsh합니다. 왜 그렇습니까?

예를 들어 비로그인 셸 구성 파일에 환경 변수를 저장하는 방법을 배웠기 때문에 ~/.profile이 작업을 수행하고 싶었습니다.

추가 정보:

 tapyu@tapyu-ThinkPad-P73
 OS: Ubuntu 20.04 focal
 Kernel: x86_64 Linux 5.13.0-28-generic
 Uptime: 2h 25m
 Packages: 2559
 Shell: zsh 5.8
 Resolution: 2048x1152
 DE: GNOME 3.36.5
 WM: Mutter
 WM Theme: Adwaita
 GTK Theme: Yaru-dark [GTK2/3]
 Icon Theme: Yaru
 Font: Ubuntu 11
 Disk: 123G / 217G (60%)
 CPU: Intel Core i7-9750H @ 12x 4.5GHz [43.0°C]
 GPU: Intel Corporation UHD Graphics 630 (Mobile)
NVIDIA Corporation GP107GLM [Quadro P620] (rev a1)
 RAM: 4740MiB / 23681MiB

감사합니다.

답변1

변수 값을 확인하십시오 LESS_TERMCAP_xxx.

print -lr ${(q)LESS_TERMCAP_mb}

(또는 zsh를 사용하지 않는 경우 echo "$LESS_TERMCAP_mb" | od -tx1c:)

\$\\E\[01\;31mThomas Dickey가 추측 한 대로 대신 $'\033'\[01\;31m( $ \ E [... 대신 033 [... ) 이 표시될 수도 있습니다 . 이는 구문(예: 대시)을 이해하지 못하는 셸에서 호출하는 경우 .profile발생할 수 있습니다 $'…'. /bin/shdash는 Ubuntu를 포함한 많은 인기 배포판에서 사용할 수 있습니다.

한 가지 해결책은 이스케이프 문자를 나타내는 다른 방법을 사용하는 것입니다. 이것을 사용하여 printf이식 가능하게 생성할 수 있습니다.

esc=$(printf \\033)
export LESS_TERMCAP_mb="${esc}[01;31m" # begin blinking

또는 .zshrc. 그런 다음 tput이스케이프 시퀀스를 하드코딩하는 대신 호출할 수 있습니다 . (LESS_TERMCAP_* 변수에 대한 문서가 있습니까?도움이 될 수도 있습니다. )

또는 다음을 사용하여 이러한 변수를 정의하십시오.몇 가지 키, less의 구성 파일( )에 기록됩니다 ~/.less. 항상 같은 값으로 설정하면 환경에 두는 것보다 더 의미가 있습니다.less특수한 구성입니다. 하지만,이전 버전의 less에서는 작동하지 않습니다..

관련 정보