Terminal

在 ~/.profile 中使用 $(tput …) 設置 LESS_TERMCAP_* 變數不起作用

  • April 8, 2022

這是我的~/.bashrc

# ...unnecessary lines skipped...
# man colors
LESS_TERMCAP_mb=$(tput blink) # start bold
LESS_TERMCAP_md=$(tput setaf 2 ; tput bold) # start bold
LESS_TERMCAP_me=$(tput sgr0)  # turn off bold, blink and underline
LESS_TERMCAP_so=$(tput smso)  # start standout (reverse video)
LESS_TERMCAP_se=$(tput rmso)  # stop standout
LESS_TERMCAP_us=$(tput smul)  # start underline
LESS_TERMCAP_ue=$(tput rmul)  # stop underline
export LESS_TERMCAP_mb
export LESS_TERMCAP_md
export LESS_TERMCAP_me
export LESS_TERMCAP_so
export LESS_TERMCAP_se
export LESS_TERMCAP_us
export LESS_TERMCAP_ue

這行得通,我可以在手冊頁中看到顏色。但是,當我將這些行從 移動~/.bashrc~/.profile(並重新登錄)時,手冊頁中的顏色就會消失。

我真的很想使用tput,因為它比一堆控制符號更清晰。

為什麼tput不工作.profile

tput不起作用,因為它需要從$TERM環境變數中知道目前的終端仿真器。在~\.profile讀取時,沒有使用終端仿真器,因此tput無法產生任何輸出。

tput可以通過鍵指定要使用的終端功能-T。所以這段程式碼可以工作:

LESS_TERMCAP_mb=$(tput -T ansi blink) # start bold
LESS_TERMCAP_md=$(tput -T ansi setaf 2 ; tput -T ansi bold) # start bold
LESS_TERMCAP_me=$(tput -T ansi sgr0)  # turn off bold, blink and underline
LESS_TERMCAP_so=$(tput -T ansi smso)  # start standout (reverse video)
LESS_TERMCAP_se=$(tput -T ansi rmso)  # stop standout
LESS_TERMCAP_us=$(tput -T ansi smul)  # start underline
LESS_TERMCAP_ue=$(tput -T ansi rmul)  # stop underline
export LESS_TERMCAP_mb
export LESS_TERMCAP_md
export LESS_TERMCAP_me
export LESS_TERMCAP_se
export LESS_TERMCAP_so
export LESS_TERMCAP_ue
export LESS_TERMCAP_us

引用自:https://unix.stackexchange.com/questions/672508