我大部分时间都是在Unix环境下工作,并使用终端仿真器。我尝试在命令行上使用颜色,因为颜色使输出更有用,更直观。
有哪些选项可以在我的终端环境中添加颜色?你使用什么技巧?你遇到过什么陷阱?
不幸的是,对颜色的支持因终端类型、操作系统、TERM设置、工具、错误的实现等而不同。
以下是我的设置中的一些提示,经过大量的实验。
1.我倾向于设置TERM=xterm-color
,这在大多数主机上是支持的(但不是全部)。
2.我在一些不同的主机上工作,不同的操作系统版本,等等。我使用从macOS X、Ubuntu Linux、RHEL/CentOS/Scientific Linux和FreeBSD的所有东西。如果可能的话,我想让事情保持简单和通用。
3.我使用GNU screen
做了大量的工作,这又增加了一层乐趣。
3.许多操作系统默认设置了诸如dircolors
之类的东西,而我不想在一百个不同的主机上修改这些东西。所以我尽量坚持使用默认值。相反,我调整了我的终端的颜色配置。
4.对一些Unix命令(ls
, grep
, less
, vim
)和Bash提示使用颜色。这些命令似乎使用标准的"ANSI转义序列"。比如说。
alias less='less --RAW-CONTROL-CHARS'
export LS_OPTS='--color=auto'
alias ls='ls ${LS_OPTS}'
我将张贴我的.bashrc
并回答我自己的问题Jeopardy Style。
以下是你可以做的几件事。
编辑器+代码
很多编辑器都有语法高亮支持。vim
和emacs
默认打开。你也可以在nano
下启用它。
你也可以通过使用Pygments作为命令行工具在终端上高亮代码。
grep
grep --color=auto
高亮显示所有的匹配。你也可以使用export GREP_OPTIONS='--color=auto'
来使它在没有别名的情况下持久化。如果你使用--color=always
,它就会即使在流水线上也使用颜色,这就会造成混乱。
ls
ls --color=always
。
指定的颜色。
export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33'
(提示:"dircolors "可能会有帮助)
PS1 你可以将你的PS1(shell提示)设置为使用颜色。比如说。
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
将产生一个类似的PS1。
[黄]lucas@ubuntu:[red]~[normal]$
你可以用它来获得真正的创造性。作为一个想法。
PS1='\e[s\e[0;0H\e[1;33m\h \t\n\e[1;32mThis is my computer\e[u[\u@\h: \w]\$ '
在你的终端顶部放置一个带有一些随机信息的栏。(为了达到最佳效果,也可以使用alias clear="echo -e '\e[2J\n\n'"
。)
去除逃逸序列。
如果有些东西在你不希望它输出颜色的时候被卡住了,我使用这个sed
行来剥离转义序列。
sed "s/\[^[[0-9;]*[a-zA-Z]//gi"
如果你想获得更真实的体验,你也可以去掉以`\e[8m'开头的行,它指示终端隐藏文本。(不广泛支持。)
sed "s/^\[^[8m.*$//gi"
还要注意,这些^[s应该是实际的、字面的^[s。你可以在bash中按下^V^[来输入它们,也就是Ctrl+V,Ctrl+[。
grep
和ls
已经提到过了,如果你想要更多的颜色,请查看Generic Coloriser,它最初的目的是给日志文件着色,但开箱后它也给ping
、traceroute
、gcc
、make
、netstat
、diff
、last
、ldap
和cvs
着色。
如果你知道重码,它很容易扩展。我已经把 "ps "和 "nmap "添加到列表中(如果你进入 "grc",我很乐意分享这两个工具的.conf文件)。
(Btw, 要通过synaptic',
pacman', 和其他方式安装它,你可能会有更好的运气搜索"grc")
设置一个粗体/彩色的提示。来自cyberciti.biz和BashFAQ。
# 'tput bold' will work regardless of the foreground and background colors.
# Place the tput output into variables, so they are only execd once.
bold=$(tput bold) # This could also be a color.
reset=$(tput sgr0)
export PS1="\u@\[$bold\]\h\[$reset\]:\w \$ "
我还设法找到了被广泛支持的颜色设置,并且在旧环境中不打印胡言乱语的字符(甚至是FreeBSD4!),如果TERM=vt100、xterm、xterm-color,似乎也能正常工作。(大部分情况下)。从我的.bashrc。
# Set some options, based on the OS
OS=`uname -s`
case "$OS" in
"SunOS" )
# Solaris ls doesn't allow color, so use special characters
LS_OPTS='-F'
alias ls='ls ${LS_OPTS}'
;;
"Linux" )
# GNU ls supports colors!
# See dircolors to customize colors
export LS_OPTS='--color=auto'
alias ls='ls ${LS_OPTS}'
# Get color support for 'less'
export LESS="--RAW-CONTROL-CHARS"
# Use colors for less, man, etc.
[[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP
export GREP_OPTIONS="--color=auto"
;;
"Darwin"|"FreeBSD")
# Most FreeBSD & Apple Darwin supports colors
export CLICOLOR=true
# Get color support for 'less'
export LESS="--RAW-CONTROL-CHARS"
# Use colors for less, man, etc.
[[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP
export GREP_OPTIONS="--color=auto"
;;
* )
echo "Unknown OS [$OS]"
;;
esac