在終端輸出彩色
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的彩色化輸出也對學習regexp和grep功能很有用。
請在您的shell配置文件添加以下內容以啟用默認的彩色化輸出,適用於Bash:
~/.bashrc
alias grep='grep --color=auto'
如果要顯示行數,添加"-n"參數即可.
您還可以直接設置GREP_OPTIONS 環境變量,不過這有可能會影響到那些用到grep [1]的腳本:
export GREP_COLOR="1;32"
GREP_COLORS環境變量其實可以定義特定的搜索。
請在您的 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.您可直接開啟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
可以使用一個簡單的命令別名啟用彩色輸出功能,~/.bashrc文件應該已經有一句從/etc/skel/.bashrc複製過來的指定別名命令:
alias ls='ls --color=auto'
以下步驟可以進一步改進ls的彩色輸出功能,比如損壞的符號連結顯示為紅色,把以下內容添加到~/.bashrc,然後重新登錄,或者把腳本source一下:
eval $(dircolors -b)
對很多人來說,彩色手冊頁比黑白的更加易於大腦消化吸收。
有兩種常用的實現man手冊頁彩色顯示的方法:使用 most 或 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.
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"
A quick way to add color to manual pages viewed on xterm包/uxterm or rxvt-unicode包 is to modify ~/.Xresources.
*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.
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 has a color option. Uncomment the Color line in /etc/pacman.conf.
(most of them outdated but still functioning)
-
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.
-
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.
-
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.
- colorgcc — A Perl wrapper to colorize the output of compilers with warning/error messages matching the gcc output format
- 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.
- colormake — A simple wrapper around make to make it's output more readable.
- 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]
See Bash/Prompt customization#Colors.
See Zsh#Colors.
See Fish#Web interface.
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
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
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 ⓘ]
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)
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
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
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
See [4] for scripts which display a chart of your current terminal scheme.