在几个命令上获得意外的彩色输出

Jef*_*eff 8 colors bash xterm

我只是将它添加到我的.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'
Run Code Online (Sandbox Code Playgroud)

...现在突然某些命令(似乎与显示环境变量有关)产生与这些新设置匹配的颜色输出。我逃避错了吗?还是这是故意的行为?我尝试了其他一些转义变体,但它们不适用于less.

例如,这是一个env命令的屏幕截图。

环境命令

php -i 也有彩色输出,但仅限于环境变量部分。

php -i 命令

Gil*_*il' 4

这是正常行为。这些环境变量包含导致终端更改其前景色的转义序列。当任何程序输出它们时,无论是 itless还是env.

\n\n

这些变量需要包含实际的转义字符,less 不会对它们进行任何后处理。

\n\n

通常你可以在lesskey 文件中放入 less 配置变量,但这对变量不起作用LESS_TERMCAP_xx,因为 less 在读取 lesskey 文件之前读取它们(从 less 444 开始)。所以你别无选择,只能将它们放入环境中。

\n\n

如果您希望这些变量仅适用于man的其他用途less,则可以使用别名manPAGER变量设置为设置环境变量的包装器脚本。

\n\n
#!/bin/sh\nescape=\xe2\x90\x9b     # a literal escape character\nexport LESS_TERMCAP_md=$escape\'[01;34m\'\n\xe2\x80\xa6\nexec less "$@"\n
Run Code Online (Sandbox Code Playgroud)\n\n

#!/bin/bash(或者,在第一行使用,您可以使用#\'\\e\'语法来获取转义字符。在/bin/sh破折号为的系统上,使用/bin/sh稍快,尽管在实践中可能并不明显。)

\n\n

调用此脚本less-color,并将其添加alias man=\'PAGER=less-color man\'到您的~/.bashrc~/.zshrc. 在某些系统上,您可以通过设置环境变量man来指示使用不同的分页器,而不是创建别名MANPAGERexport MANPAGER=less-color在您的~/.profile.

\n