Bash

在幾個命令上獲得意外的彩色輸出

  • August 19, 2013

我剛剛將它添加到我.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也有彩色輸出,但僅限於環境變數部分。

php -i 命令

這是正常行為。這些環境變數包含導致終端更改其前景色的轉義序列。當任何程序輸出它們時,無論是它less還是env.

這些變數需要包含實際的轉義字元,less 不對它們進行任何後處理。

通常你可以在你的lesskey文件中放less配置變數,但這對變數不起作用LESS_TERMCAP_xx,因為less在讀取lesskey文件之前讀取它們(從less 444開始)。所以你別無選擇,只能把它們放在環境中。

如果您希望這些變數僅應用於man而不應用於其他用途less,您可以使用別名來manPAGER變數設置為設置環境變數的包裝腳本。

#!/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

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