Bash
在幾個命令上獲得意外的彩色輸出
我剛剛將它添加到我
.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
也有彩色輸出,但僅限於環境變數部分。
這是正常行為。這些環境變數包含導致終端更改其前景色的轉義序列。當任何程序輸出它們時,無論是它
less
還是env
.這些變數需要包含實際的轉義字元,less 不對它們進行任何後處理。
通常你可以在你的lesskey文件中放less配置變數,但這對變數不起作用
LESS_TERMCAP_xx
,因為less在讀取lesskey文件之前讀取它們(從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