在终端输出彩色
diff[编辑 | 编辑源代码]
diffutils from version 3.4 includes the --color
option (GNU mailing list).
$ alias diff 'diff --color=auto'
Alternatively, the following wrappers can be used:
- colordiff — A Perl script wrapper for 'diff' that produces the same output but with pretty 'syntax' highlighting
- cwdiff — A (w)diff wrapper to support directories and colorize the output
grep[编辑 | 编辑源代码]
除了美观用途以外,grep的彩色化输出也对学习regexp和grep功能很有用。
请在您的shell配置文件添加以下内容以启用默认的彩色化输出,适用于Bash:
~/.bashrc
alias grep='grep --color=auto'
如果要显示行数,添加"-n"参数即可.
您还可以直接设置GREP_OPTIONS 环境变量,不过这有可能会影响到那些用到grep [1]的脚本:
export GREP_COLOR="1;32"
GREP_COLORS
环境变量其实可以定义特定的搜索。
less[编辑 | 编辑源代码]
环境变量[编辑 | 编辑源代码]
请在您的 shell 配置文件添加:
~/.bashrc
export LESS=-R export LESS_TERMCAP_mb=$'\E[1;31m' export LESS_TERMCAP_md=$'\E[1;36m' export LESS_TERMCAP_me=$'\E[0m' export LESS_TERMCAP_se=$'\E[0m' export LESS_TERMCAP_so=$'\E[01;44;33m' export LESS_TERMCAP_ue=$'\E[0m' export LESS_TERMCAP_us=$'\E[1;32m'
值随您所愿修改,请参照:ANSI escape code。
LESS_TERMCAL_xx
variables is currently undocumented in less(1), for a detailed explanation on these sequences, see this answer.Wrappers[编辑 | 编辑源代码]
您可直接开启less内置的代码高亮。先安装软件包 source-highlight包,再在您的Shell配置文件里添加以下:
~/.bashrc
export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s" export LESS='-R '
经常使用命令行界面的用户可以安装lesspipe包。
用户可以使用以下 less 命令列出一个压缩包里的文件列表:
$ less compressed_file.tar.gz
==> use tar_file:contained_file to view a file in the archive -rw------- username/group 695 2008-01-04 19:24 compressed_file/content1 -rw------- username/group 43 2007-11-07 11:17 compressed_file/content2 compressed_file.tar.gz (END)
lesspipe
还被赋予less
对文件而不仅是压缩包进行交互的能力,从而成为打开某一种文件的一个新工具(比如用来代替python-html2text包查看html文件。
安装完lesspipe
后需重新登录以激活其功能,或者运行
source /etc/profile.d/lesspipe.sh
读取标准输入时彩色化输出[编辑 | 编辑源代码]
当你运行一个命令和使用管道连接标准输出 (stdout) 到 less 作为分页视图 (e.g. yaourt -Qe --date | less
), 你也许会发现输出不再是彩色化的. 这通常是因为该程序试图检测如果其 stdout 是交互式终端, 在这种情况下将输出彩色化文本,否则输出未着色文本. 当你想重定向 stdout 到一个文件中,这是一个很好的行为, e.g. yaourt -Qe --date > pkglst-backup.txt
. 但是,当你想在 less
浏览输出时这将不是很好的行为.
一些程序提供禁用交互式 tty 检测的选项:
# dmesg --color=always | less
如果程序不提供任何类似选项,可以欺骗程序相信stdout 是交互式终端,有几种可行方式:
- stdoutisatty 是一个用c写成的小程序, 它可以调用 "fake interactive tty". 你可以通过 AUR: stdoutisattyAUR安装. 用法示例:
$ stdoutisatty yaourt -Qe --date | less
$ unbuffer yaourt -Qe --date | less
zpty 是 zsh 的一个模块, 这里有一个来自
依云[2] 的小函数, 将其放入 ~/.zshrc
:
~/.zshrc
zmodload zsh/zpty pty() { zpty pty-${UID} ${1+$@} if [[ ! -t 1 ]];then setopt local_traps trap '' INT fi zpty -r pty-${UID} zpty -d pty-${UID} } ptyless() { pty $@ | less }
用法:
$ ptyless program
通过管道转接到其它程序 (less in this example):
$ pty program | less
ls[编辑 | 编辑源代码]
可以使用一个简单的命令别名启用彩色输出功能,~/.bashrc
文件应该已经有一句从/etc/skel/.bashrc
复制过来的指定别名命令:
alias ls='ls --color=auto'
以下步骤可以进一步改进ls
的彩色输出功能,比如损坏的符号链接显示为红色,把以下内容添加到~/.bashrc
,然后重新登录,或者把脚本source一下:
eval $(dircolors -b)
man[编辑 | 编辑源代码]
对很多人来说,彩色手册页比黑白的更加易于大脑消化吸收。
有两种常用的实现man手册页彩色显示的方法:使用 most
或 less
.
使用 less[编辑 | 编辑源代码]
You can set various LESS_TERMCAP_*
environment variables to change how it highlights text. For example, LESS_TERMCAP_md
is used for bold text and LESS_TERMCAP_me
is used to reset to normal text formatting[3].
In Bash, the escape sequences you can use are the same ones from Bash/Prompt customization and these variables can be defined in a function wrapping the man
command:
~/.bashrc
man() { LESS_TERMCAP_md=$'\e[01;31m' \ LESS_TERMCAP_me=$'\e[0m' \ LESS_TERMCAP_se=$'\e[0m' \ LESS_TERMCAP_so=$'\e[01;44;33m' \ LESS_TERMCAP_ue=$'\e[0m' \ LESS_TERMCAP_us=$'\e[01;32m' \ command man "$@" }
For Fish you could accomplish this with:
~/.config/fish/config.fish
set -xU LESS_TERMCAP_md (printf "\e[01;31m") set -xU LESS_TERMCAP_me (printf "\e[0m") set -xU LESS_TERMCAP_se (printf "\e[0m") set -xU LESS_TERMCAP_so (printf "\e[01;44;33m") set -xU LESS_TERMCAP_ue (printf "\e[0m") set -xU LESS_TERMCAP_us (printf "\e[01;32m")
Remember to source your config or restart your shell to make the changes take effect.
For a detailed explanation on these variables, see this answer. Bash/Prompt customization#Examples has some (non-Bash-specific) examples of escape sequences that can be used.
Using most[编辑 | 编辑源代码]
The basic function of 'most' is similar to less
and more
, but it has a smaller feature set. Configuring most to use colors is easier than using less, but additional configuration is necessary to make most behave like less.
编辑文件/etc/man_db.conf
,去掉pager项的注释并修改为:
DEFINE pager most -s
然后测试一下:
$ man whatever_man_page
通过修改~/.mostrc
(不存在的话请自行创建)或全局配置文件 /etc/most.conf
。示例~/.mostrc
:
% Color settings color normal lightgray black color status yellow blue color underline yellow black color overstrike brightblue black
以下示例配置使用类似less
的快捷键:
% less-like keybindings unsetkey "^K" unsetkey "g" unsetkey "G" unsetkey ":" setkey next_file ":n" setkey find_file ":e" setkey next_file ":p" setkey toggle_options ":o" setkey toggle_case ":c" setkey delete_file ":d" setkey exit ":q" setkey bob "g" setkey eob "G" setkey down "e" setkey down "E" setkey down "j" setkey down "^N" setkey up "y" setkey up "^Y" setkey up "k" setkey up "^P" setkey up "^K" setkey page_down "f" setkey page_down "^F" setkey page_up "b" setkey page_up "^B" setkey other_window "z" setkey other_window "w" setkey search_backward "?" setkey bob "p" setkey goto_mark "'" setkey find_file "E" setkey edit "v"
Using X resources[编辑 | 编辑源代码]
A quick way to add color to manual pages viewed on xterm包/uxterm
or rxvt-unicode包 is to modify ~/.Xresources
.
xterm[编辑 | 编辑源代码]
*VT100.colorBDMode: true *VT100.colorBD: red *VT100.colorULMode: true *VT100.colorUL: cyan
which replaces the decorations with the colors. Also add:
*VT100.veryBoldColors: 6
if you want colors and decorations (bold or underline) at the same time. See xterm(1) for a description of the veryBoldColors
resource.
rxvt-unicode[编辑 | 编辑源代码]
URxvt.colorIT: #87af5f URxvt.colorBD: #d7d7d7 URxvt.colorUL: #87afd7
Run:
$ xrdb -load ~/.Xresources
Launch a new xterm/uxterm
or rxvt-unicode
and you should see colorful man pages.
This combination puts colors to bold and underlined words in xterm/uxterm
or to bold, underlined, and italicized text in rxvt-unicode
. You can play with different combinations of these attributes (see the sources (archived) of this item).
pacman[编辑 | 编辑源代码]
Pacman has a color option. Uncomment the Color
line in /etc/pacman.conf
.
Wrappers for other programs[编辑 | 编辑源代码]
(most of them outdated but still functioning)
Universal wrappers with multiple preconfigured presets[编辑 | 编辑源代码]
- rainbow — Colorize commands output or STDIN using patterns.
Presets: df, diff, env, host, ifconfig, java-stack-trace, jboss, jonas, md5sum, mvn2, mvn3, ping, tomcat, top, traceroute.
- https://github.com/nicoulaj/rainbow || not packaged? search in AUR
- grc — Yet another colouriser for beautifying your logfiles or output of commands.
Presets: configure, cvs, df, diff, esperanto, gcc, irclog, ldap, log, mount, netstat, ping, proftpd, traceroute, wdiff.
- colorlogs — Colorize commands output or STDIN using patterns.
Presets: logs, git status, ant, maven.
- https://github.com/memorius/colorlogs || not packaged? search in AUR
- cope — A colourful wrapper for terminal programs.
Presets: acpi, arp, cc, df, dprofpp, fdisk, free, g++, gcc, id, ifconfig, ls, lspci, lsusb, make, md5sum, mpc, netstat, nm, nmap, nocope, ping, pmap, ps, readelf, route, screen, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shasum, socklist, stat, strace, tcpdump, tracepath, traceroute, w, wget, who, xrandr.
- cw — A non-intrusive real-time ANSI color wrapper for common unix-based commands.
Presets: arp, arping, auth.log@, blockdev, cal, cksum, clock, configure, cpuinfo@, crontab@, cw-pipe, cw-test.cgi, date, df, diff, dig, dmesg, du, env, figlet, file, find, finger, free, fstab@, fuser, g++, gcc, group@, groups, hdparm, hexdump, host, hosts@, id, ifconfig, inittab@, iptables, last, lastlog, lsattr, lsmod, lsof, ltrace-color, make, md5sum, meminfo@, messages@, mount, mpg123, netstat, nfsstat, nmap, nslookup, objdump, passwd@, ping, pmap, pmap_dump, praliases, profile@, protocols@, ps, pstree, quota, quotastats, resolv.conf@, route, routel, sdiff, services@, showmount, smbstatus, stat, strace-color, sysctl, syslog, tar, tcpdump, tracepath, traceroute, umount, uname, uptime, users, vmstat, w, wc, whereis, who, xferlog.
Compilers[编辑 | 编辑源代码]
- colorgcc — A Perl wrapper to colorize the output of compilers with warning/error messages matching the gcc output format
Ping[编辑 | 编辑源代码]
- prettyping — Add some great features to ping monitoring. A wrapper around the standard ping tool with the objective of making the output prettier, more colorful, more compact, and easier to read.
Make[编辑 | 编辑源代码]
- colormake — A simple wrapper around make to make it's output more readable.
Libraries[编辑 | 编辑源代码]
- ruby-rainbow — Rainbow is extension to ruby's String class adding support for colorizing text on ANSI terminal
- python-blessings — A thin, practical wrapper around terminal coloring, styling, and positioning
- https://pypi.python.org/pypi/blessings || python-blessings包, python2-blessings包[损坏的链接:package not found]
Shells[编辑 | 编辑源代码]
bash[编辑 | 编辑源代码]
See Bash/Prompt customization#Colors.
zsh[编辑 | 编辑源代码]
See Zsh#Colors.
Fish[编辑 | 编辑源代码]
See Fish#Web interface.
Terminal emulators[编辑 | 编辑源代码]
Virtual console[编辑 | 编辑源代码]
The colors in the Linux virtual console—see console(4)[失效链接 2017-09-06]—running on the framebuffer can be changed. This is done by writing the escape code \\e]PXRRGGBB
, where X
is the hexadecimal index of the color from 0-F, and RRGGBB
is a traditional hexadecimal RGB code.
For example, to reuse existing colors defined in ~/.Xresources
, add the following to the shell initialization file (such as ~/.bashrc
):
if [ "$TERM" = "linux" ]; then _SEDCMD='s/.*\*color\([0-9]\{1,\}\).*#\([0-9a-fA-F]\{6\}\).*/\1 \2/p' for i in $(sed -n "$_SEDCMD" $HOME/.Xresources | awk '$1 < 16 {printf "\\e]P%X%s", $1, $2}'); do echo -en "$i" done clear fi
Login screen[编辑 | 编辑源代码]
The below is a colored example of the virtual console login screen in /etc/issue
. Create a backup of the original file with mv /etc/issue /etc/issue.bak
as root, and create a new /etc/issue
:
echo -e '\e[H\e[2J' > issue echo -e ' \e[1;30m| \e[34m\\s \\r' >> issue echo -e ' \e[36;1m/\\\\ \e[37m|| \e[36m| | \e[30m|' >> issue echo -e ' \e[36m/ \\\\ \e[37m|| \e[36m| _ \e[30m| \e[32m\\t' >> issue echo -e ' \e[1;36m/ \e[0;36m.. \e[1m\\\\ \e[37m//==\\\\\\\\ ||/= /==\\\\ ||/=\\\\ \e[36m| | |/ \\\\ | | \\\\ / \e[30m| \e[32m\\d' >> issue echo -e ' \e[0;36m/ . . \\\\ \e[37m|| || || | || || \e[36m| | | | | | X \e[1;30m|' >> issue echo -e ' \e[0;36m/ . . \\\\ \e[37m\\\\\\\\==/| || \\\\==/ || || \e[36m| | | | \\\\_/| / \\\\ \e[1;30m| \e[31m\\U' >> issue echo -e ' \e[0;36m/ .. .. \\\\ \e[0;37mA simple, lightweight linux distribution. \e[1;30m|' >> issue echo -e ' \e[0;36m/_\x27 `_\\\\ \e[1;30m| \e[35m\\l \e[0mon \e[1;33m\\n' >> issue echo -e ' \e[0m' >> issue echo -e >> issue
Save the file and make it executable with chmod +x /etc/issue
.
See also:
- https://bbs.archlinux.org/viewtopic.php?pid=386429#p386429
- https://www.linuxfromscratch.org/blfs/view/svn/postlfs/logon.html
X window system[编辑 | 编辑源代码]
Most Xorg terminals, including xterm and urxvt, support at least 16 basic colors. The colors 0-7 are the 'normal' colors. Colors 8-15 are their 'bright' counterparts, used for highlighting. These colors can be modified through X resources, or through specific terminal settings. For example:
~/.Xresources
! Black + DarkGrey *color0: #000000 *color8: #555753 ! DarkRed + Red *color1: #ff6565 *color9: #ff8d8d ! DarkGreen + Green *color2: #93d44f *color10: #c8e7a8 ! DarkYellow + Yellow *color3: #eab93d *color11: #ffc123 ! DarkBlue + Blue *color4: #204a87 *color12: #3465a4 ! DarkMagenta + Magenta *color5: #ce5c00 *color13: #f57900 !DarkCyan + Cyan (both not tango) *color6: #89b6e2 *color14: #46a4ff ! LightGrey + White *color7: #cccccc *color15: #ffffff
foreground
and background
can be read by other applications (such as emacs). This can be avoided by specifiying the class name, for example XTerm.foreground
.See also:
- #Using X resources for how to color bold and underlined text automatically.
- Color Themes - Extensive list of terminal color themes by Phraktured.
- Xcolors.net List of user-contributed terminal color themes.
- Xcolors by dkeg[失效链接 2020-08-02 ⓘ]
Display all 256 colors[编辑 | 编辑源代码]
Prints all 256 colors across the screen.
$ (x=`tput op` y=`printf %76s`;for i in {0..256};do o=00$i;echo -e ${o:${#o}-3:3} `tput setaf $i;tput setab $i`${y// /=}$x;done)
Display tput escape codes[编辑 | 编辑源代码]
Replace tput op
with whatever tput you want to trace. op
is the default foreground and background color.
$ ( strace -s5000 -e write tput op 2>&2 2>&1 ) | tee -a /dev/stderr | grep -o '"[^"]*"'
033[\033[1;34m"\33[39;49m"\033[00m
Enumerate supported colors[编辑 | 编辑源代码]
The following command will let you discover all the terminals you have terminfo support for, and the number of colors each terminal supports. The possible values are: 8, 15, 16, 52, 64, 88 and 256.
$ for T in `find /usr/share/terminfo -type f -printf '%f '`;do echo "$T `tput -T $T colors`";done|sort -nk2
Eterm-88color 88 rxvt-88color 88 xterm+88color 88 xterm-88color 88 Eterm-256color 256 gnome-256color 256 konsole-256color 256 putty-256color 256 rxvt-256color 256 screen-256color 256 screen-256color-bce 256 screen-256color-bce-s 256 screen-256color-s 256 xterm+256color 256 xterm-256color 256
Enumerate terminal capabilities[编辑 | 编辑源代码]
This command is useful to see what features that are supported by your terminal.
$ infocmp -1 | sed -nu 's/^[ \000\t]*//;s/[ \000\t]*$//;/[^ \t\000]\{1,\}/!d;/acsc/d;s/=.*,//p'|column -c80
bel cuu ich kb2 kf15 kf3 kf44 kf59 mc0 rmso smul blink cuu1 il kbs kf16 kf30 kf45 kf6 mc4 rmul tbc bold cvvis il1 kcbt kf17 kf31 kf46 kf60 mc5 rs1 u6 cbt dch ind kcub1 kf18 kf32 kf47 kf61 meml rs2 u7 civis dch1 indn kcud1 kf19 kf33 kf48 kf62 memu sc u8 clear dl initc kcuf1 kf2 kf34 kf49 kf63 op setab u9 cnorm dl1 invis kcuu1 kf20 kf35 kf5 kf7 rc setaf vpa
Color scheme scripts[编辑 | 编辑源代码]
See [4] for scripts which display a chart of your current terminal scheme.