存在哪些选项可为终端环境添加颜色?您使用什么技巧?您遇到了什么陷阱?
不幸的是,对颜色的支持取决于终端类型,操作系统,TERM设置,实用程序,错误的实现等。
这里有一些技巧经过大量实验后,我的设置得以实现:
我倾向于设置
TERM=xterm-color
,大多数主机(但并非全部)都支持该设置。我在许多不同的主机上工作主机,不同的OS版本等。我使用从macOS X,Ubuntu Linux,RHEL / CentOS / Scientific Linux和FreeBSD来的所有内容。如果可能的话,我试图使事情简单和通用。
我使用GNU
screen
进行了大量工作,这又增加了一层乐趣。许多操作系统都将
dircolors
设置为默认值,并且我不想在一百台不同的主机上进行修改。因此,我尝试使用默认值。相反,我调整了终端的颜色配置。对某些Unix命令(
ls
,grep
,less
,vim
)和Bash提示符使用颜色。这些命令似乎使用标准的“ ANSI转义序列”。例如:alias less='less --RAW-CONTROL-CHARS'
export LS_OPTS='--color=auto'
alias ls='ls ${LS_OPTS}'
我将发布我的
.bashrc
并回答我自己的问题危险风格。#1 楼
您可以执行以下几项操作:编辑器+代码
许多编辑器都支持语法突出显示。
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:[红色]〜[普通] $
,您可以真正发挥创意。作为一个想法:
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 "s/\[^[[0-9;]*[a-zA-Z]//gi"
如果想要更真实的体验,还可以摆脱以
sed
开头的行,该行指示终端隐藏文本。 (不受广泛支持。)sed "s/^\[^[8m.*$//gi"
还要注意,这些^ [s应该是实际的,文字^ [s。您可以通过按bash中的^ V ^ [来键入它们,即Ctrl + V,Ctrl + [。
评论
PS1的第一行应如下所示:PS1 ='\ e [33; 1m \ u @ \ h:\ e [31m \ W \ e [0m \ $']。第四个反斜杠后有多余的x。
–克里斯
13年5月23日在7:30
转义符应放在\ [... \]中,否则第二行中的命令将覆盖第一行。 PS1 ='[\ e [33; 1m] \ u @ \ h:[\ e [31m] \ W \ e [0m \ $'
– hgajshb
13年8月29日在19:09
ls --color = always无效。 @Michael Durrant的方法对此更好:ls --color = al> / dev / null 2>&1 &&别名ls ='ls -F --color = al'||别名ls ='ls -G'
–西蒙C.
19年2月1日在6:51
#2 楼
我还使用:export TERM=xterm-color
export GREP_OPTIONS='--color=auto' GREP_COLOR='1;32'
export CLICOLOR=1
export LSCOLORS=ExFxCxDxBxegedabagacad
如果您希望对提示进行着色,则定义的颜色变量会很有用:
export COLOR_NC='\e[0m' # No Color
export COLOR_BLACK='\e[0;30m'
export COLOR_GRAY='\e[1;30m'
export COLOR_RED='\e[0;31m'
export COLOR_LIGHT_RED='\e[1;31m'
export COLOR_GREEN='\e[0;32m'
export COLOR_LIGHT_GREEN='\e[1;32m'
export COLOR_BROWN='\e[0;33m'
export COLOR_YELLOW='\e[1;33m'
export COLOR_BLUE='\e[0;34m'
export COLOR_LIGHT_BLUE='\e[1;34m'
export COLOR_PURPLE='\e[0;35m'
export COLOR_LIGHT_PURPLE='\e[1;35m'
export COLOR_CYAN='\e[0;36m'
export COLOR_LIGHT_CYAN='\e[1;36m'
export COLOR_LIGHT_GRAY='\e[0;37m'
export COLOR_WHITE='\e[1;37m'
然后我的提示是这样的:
case $TERM in
xterm*|rxvt*)
local TITLEBAR='\[3]0;\u ${NEW_PWD}q4312078q7\]'
;;
*)
local TITLEBAR=""
;;
esac
local UC=$COLOR_WHITE # user's color
[ $UID -eq "0" ] && UC=$COLOR_RED # root's color
PS1="$TITLEBAR\n\[${UC}\]\u \[${COLOR_LIGHT_BLUE}\]${PWD} \[${COLOR_BLACK}\]$(vcprompt) \n\[${COLOR_LIGHT_GREEN}\]→\[${COLOR_NC}\] "
$(vcprompt)正在我的〜/ sbin中调用一个python脚本,该脚本打印有关当前路径的版本控制信息。它包括对Mercurial,Git,Svn,Cvs等的支持。脚本的作者在此处提供源代码。
这是我的即时配置的完整源代码:
评论
有关使用上述PS1时遇到的线路问题的解决方案,请参见此处:stackoverflow.com/questions/5087036/…
– Xander Dunn
2012-09-10 15:53
我已经更新了答案,以反映提示中颜色的转义括号。谢谢!
–克里斯
2014年11月27日7:57
$ LSCOLORS和$ CLICOLOR用于BSD ls。 GNU ls(Linux)使用具有不同语法的$ LS_COLORS。因为GNU对我来说就像家一样,所以我使用LSCOLORS = exgxfxDacxBaBaCaCaeaEa在BSD上模拟GNU的颜色。
–亚当·卡兹(Adam Katz)
15年1月12日在22:22
grep:警告:GREP_OPTIONS已过时;请使用别名或脚本
–史蒂文·阿尔默洛斯(Steven Almeroth)
16年11月23日在21:19
您可能需要获取.bashrc文件,以使修改生效。您可以使用以下命令进行操作。源/path/to/.bashrc
– amiabl
19年4月4日在18:43
#3 楼
grep
和ls
已经提到过,如果您想了解更多颜色,请查看Generic Coloriser,其最初目的是为日志文件着色,但是开箱即用,它也为ping
,traceroute
,gcc
,make
,netstat
,diff
,last
,ldap
和cvs
。如果知道正则表达式,它很容易扩展。我已将
ps
和nmap
添加到列表中(如果您喜欢grc
,我将非常高兴为这两个工具共享.conf文件)(顺便说一句,请通过synaptic
安装它,pacman
等,您可能会更好地寻找“ grc”)评论
grc现在默认情况下支持ps。我会对您的nmap着色感兴趣。另请参阅我的答案,以在升级grc时吸收所有新命令的方式对所有这些进行混叠。
–亚当·卡兹(Adam Katz)
15年1月13日,下午3:05
我注意到了。这是我的conf.nmap(以及其他所有东西,真的)gist.github.com/sygo/844982#file-conf-nmap-我注意到您在infosec中工作,您可能会发现conf.hexdump很有趣,但我还没有完成虽然。
–西戈
2015年2月6日在21:29
谢谢@Sygo。我已经分叉并修改了您的要点。我从未真正使用git提交过数据(更不用说github的要点了),而且我不知道如何建议将其合并回您(我猜这是因为要点太简单了)。
–亚当·卡兹(Adam Katz)
2015年2月7日,下午1:54
我怀疑您不能,因为这是要点,而不是适当的存储库。我确实检查了您的叉子,并且肯定会试一试您的版本。我很好奇十六进制转储会变成什么...
–西戈
2015年2月7日在2:48
#4 楼
多年来,我一直在磨练.bashrc使其可以在OSX和Ubuntu上使用。我还使用紧凑的条件语句将它的大小减小到28行。
有了它,我的PS1提示符看起来就像:
红色时间,绿色用户名,浅蓝色机器名称,深蓝色pwd和黄色git分支。
我的功能PS1提示:
显示git分支!
“修剪”长目录路径(超过6个元素)以显示前3个和后3个目录,其间有
_
(即最后返回回车,以便提示始终在左侧!
我的
pwd sed
文件中的相关行是: git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)//'; }
HOST='3[02;36m\]\h'; HOST=' '$HOST
TIME='3[01;31m\]\t 3[01;32m\]'
LOCATION=' 3[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#_#g"`'
BRANCH=' 3[00;33m\]$(git_branch)\[3[00m\]\n$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[3[01;36m\]>'
对于ls有可用颜色,没有时没有错误(例如OSX):
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
评论
颜色在OS X上适用于ls,但是可以通过使用export CLICOLOR = 1来完成。
– ThomasW
15年3月4日在9:47
@ThomasW,但不是在Linux上:-p这个家伙同时使用。
–吉米·凯恩(Jimmy Kane)
15年12月4日在16:58
尽管如此,ThomasW是正确的指出答案是错误的,因为在MacOS 10上ls不能使用颜色。答案也是错误的,因为这里的提示字符串实际上是错误的。它们不能正确地平衡\ [和\],并已导致至少一个人复制此答案时遇到问题。
– JdeBP
16年11月17日在4:16
#5 楼
手册页的颜色(更多详细信息):function _colorman() {
env \
LESS_TERMCAP_mb=$(printf "\e[1;35m") \
LESS_TERMCAP_md=$(printf "\e[1;34m") \
LESS_TERMCAP_me=$(printf "\e[0m") \
LESS_TERMCAP_se=$(printf "\e[0m") \
LESS_TERMCAP_so=$(printf "\e[7;40m") \
LESS_TERMCAP_ue=$(printf "\e[0m") \
LESS_TERMCAP_us=$(printf "\e[1;33m") \
"$@"
}
function man() { _colorman man "$@"; }
function perldoc() { command perldoc -n less "$@" |man -l -; }
grep的颜色(
1;32
为亮绿色,有关其他颜色,请参见此处的其他帖子):GREP_OPTS='--color=auto' # for aliases since $GREP_OPTIONS is deprecated
GREP_COLOR='1;32' # (legacy) bright green rather than default red
GREP_COLORS="ms=$GREP_COLOR" # (new) Matching text in Selected line = green
alias grep='grep $GREP_OPTS'
alias egrep='egrep $GREP_OPTS'
alias fgrep='fgrep $GREP_OPTS'
为GNU ls提供更多颜色:
# use the config at ~/.dircolors if it exists, otherwise generate anew
eval "$( dircolors --sh $(ls -d ~/.dircolors 2>/dev/null) )"
# Usage: _ls_colors_add BASE NEW [NEW...]
# Have LS color given NEW extensions the way BASE extension is colored
_ls_colors_add() {
local BASE_COLOR="${LS_COLORS##*:?.=}" NEW
if [ "$LS_COLORS" != "$BASE_COLOR" ]; then
BASE_COLOR="${BASE_COLOR%%:*}"
shift
for NEW in "$@"; do
if [ "$LS_COLORS" = "${LS_COLORS#*.$NEW=}" ]; then
LS_COLORS="${LS_COLORS%%:}:*.$NEW=$BASE_COLOR:"
fi
done
fi
export LS_COLORS
}
_ls_colors_add zip jar xpi # archives
_ls_colors_add jpg ico JPG PNG webp # images
_ls_colors_add ogg opus # audio (opus now included by default)
CLICOLOR=1 # BSD auto-color trigger (like ls -G but for everything)
if ls -ld --color=auto / >/dev/null 2>&1
then alias ls="ls -ph --color=auto"
else alias ls="ls -ph"
fi
安装
grc
(通用增色剂)并将其添加到您的别名:# using this as a variable allows easier calling down lower
export GRC='grc -es --colour=auto'
# loop through known commands plus all those with named conf files
for cmd in g++ head ld ping6 tail traceroute6 `locate grc/conf.`; do
cmd="${cmd##*grc/conf.}" # we want just the command
# if the command exists, alias it to pass through grc
type "$cmd" >/dev/null 2>&1 && alias "$cmd"="$GRC $cmd"
done
# This needs run-time detection. We even fake the 'command not found' error.
configure() {
if [[ -x ./configure ]]; then
colourify ./configure "$@"
else
echo "configure: command not found" >&2
return 127
fi
}
# GRC plus LS awesomeness (assumes you have an alias for ls)
unalias ll 2>/dev/null
if ls -ld --color=always / >/dev/null 2>&1; then GNU_LS="--color=always"; fi
ll() {
if [[ -t 1 ]] || [[ -n "$CLICOLOR_FORCE" ]]
then colourify ls -l $GNU_LS "$@"
else ls -l "$@"
fi
}
差异的颜色:函数的内容太多,请使用脚本并在rc文件中对其进行别名(如果安装了
grc
则不需要):#!/usr/bin/perl
use strict;
use warnings;
open (DIFF, "-|", "diff", @ARGV) or die $!;
my $ydiff = 1;
while (<DIFF>) {
if (not -t 1) {
print;
next;
}
chomp;
$ydiff = 0 if /^[ <>\@+-]/ or ($. == 1 && /^\d+[a-z]{1,5}\d+$/);
my $color = "";
if (! $ydiff && /^[\@+-<>]/) {
$color = (/^[<-](?!--$)/ ? 1 : /^[+>]/ ? 2 : 5);
} elsif ($ydiff && /\t {6}([<|>])(?:\t|$)/) {
$color = ( eq "<" ? 1 : eq ">" ? 2 : 4);
}
$color ? printf ("\e[1;3%dm%s\e[0;0m\n",$color,$_) : print "$_\n";
}
close DIFF;
bash提示的颜色:
# Shorten home dir, cygwin drives, paths that are too long
if [ -d /cygdrive ] && uname -a |grep -qi cygwin; then CYGWIN_OS=1; fi
function PSWD() {
local p="$*" space A B cols="${COLUMNS:-`tput cols 2>/dev/null || echo 80`}"
p="${p/$HOME/\~}" # shrink home down to a tilde
if [ -n "$CYGWIN_OS" ] && [ "${p#/cygdrive/?/}" != "$p" ]; then
p="${p:10:1}:${p:11}" # /cygdrive/c/hi -> c:/hi
fi
space="$((${#USER}+${#HOSTNAME}+6))" # width w/out the path
if [ "$cols" -lt 60 ]; then echo -n "$N "; space=-29; p="$p$N\b"; fi
if [ "$cols" -lt "$((space+${#p}+20))" ]; then # < 20 chars for the command
A=$(( (cols-20-space)/4 )) # a quarter of the space (-20 for cmd)
if [ $A -lt 4 ]; then A=4; fi # 4+ chars from beginning
B=$(( cols-20-space-A*2 )) # half (plus rounding) of the space
if [ $B -lt 8 ]; then B=8; fi # 8+ chars from end
p="${p:0:$A}..${p: -$B}"
fi
echo "$p"
}
PSC() { echo -ne "\[3[${1:-0;38}m\]"; }
PR="0;32" # default color used in prompt is green
if [ "$(id -u)" = 0 ]; then
sudo=41 # root is red background
elif [ "$USER" != "${SUDO_USER:-$USER}" ]; then
sudo=31 # not root, not self: red text
else sudo="$PR" # standard user color
fi
PROMPT_COMMAND='[ $? = 0 ] && PS1=${PS1[1]} || PS1=${PS1[2]}'
PSbase="$(PSC $sudo)\u$(PSC $PR)@\h $(PSC 33)$(PSWD \w)"
PS1[1]="$PSbase$(PSC $PR)$ $(PSC)"
PS1[2]="$PSbase$(PSC 31)$ $(PSC)"
PS1="${PS1[1]}"
unset sudo PR PSbase
评论
赞成截图
–绿色
17年7月13日在4:39
我的PSWD()函数以前是POSIX兼容的,但是使用bash / zsh子字符串处理则非常容易。请参阅POSIX版本的修订版6,该版本涉及很多问号,并且根本无法适应终端宽度。我没有更新屏幕截图,但是在80个字符的宽度上只是一个很小的变化。
–亚当·卡兹(Adam Katz)
17年8月23日在23:09
CLICOLOR = 1在FREEBSD 11.2中对我不起作用
–西蒙C.
19年2月1日在6:52
@SimonC。 –您可能在FreeBSD系统上而不是BSD上使用GNU实用程序。 CLICOLOR = 1 ls应该与使用BSD的ls -G做相同的事情(在较旧的BSD上是ls -g)。如果ls --color有效(没有错误),则说明您使用的是GNU的ls命令,并且$ CLICOLOR被忽略。
–亚当·卡兹(Adam Katz)
19年2月4日在17:30
@SimonC。 –您必须实际加载〜/ .bashrc才能使所有更改生效。运行源〜/ .bashrc或启动新的bash会话(启动终端或运行bash)。
–亚当·卡兹(Adam Katz)
19-2-4在19:03
#6 楼
设置粗体/彩色提示。从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
评论
或者,如果您想使用ZSH,aperiodic.net / phil / prompt上的Phil Gold提示是一件艺术品。
–tsvallender
2010年8月12日在9:27
#7 楼
在这里还没有说过的话:要用gcc为编译结果着色,请使用JohannesSchlüter的colorgcc
要着色日志,请使用multitail
要着色任何标准输出,我将xcol组合在一起
我个人是通过xcol工具使用它们的。
我像这样在脚本中使用这些变量
#normal=$(tput sgr0) # normal text
normal=$'\e[0m' # (works better sometimes)
bold=$(tput bold) # make colors bold/bright
red="$bold$(tput setaf 1)" # bright red text
green=$(tput setaf 2) # dim green text
fawn=$(tput setaf 3); beige="$fawn" # dark yellow text
yellow="$bold$fawn" # bright yellow text
darkblue=$(tput setaf 4) # dim blue text
blue="$bold$darkblue" # bright blue text
purple=$(tput setaf 5); magenta="$purple" # magenta text
pink="$bold$purple" # bright magenta text
darkcyan=$(tput setaf 6) # dim cyan text
cyan="$bold$darkcyan" # bright cyan text
gray=$(tput setaf 7) # dim white text
darkgray="$bold"$(tput setaf 0) # bold black = dark gray text
white="$bold$gray" # bright white text
我也喜欢这个小功能colorEcho(在Stack Overflow上找到)
echo "${red}hello ${yellow}this is ${green}coloured${normal}"
对不起,不允许发布更多链接
评论
您好,您如何制作提示路径的标志?我说的是带有三角形末端的矩形棒
– Artur Vieira
17/12/21在22:50
它也可以在ubuntu gnu终端上工作吗?
– helle
18-2-22在16:08
lnav还是显示彩色日志文件的好工具
–西里尔·查博索(Cyril Chaboisseau)
18年5月30日在6:18
#8 楼
有一个很好的工具可以为ls命令设置颜色-http://geoff.greer.fm/lscolors/#9 楼
我建议您查看ZSH及其插件oh-my-zsh,它具有我所见过的最强大的控制台功能之一。其中之一是为您的终端选择主题。这是我主题的示例...在tty中,颜色不是那么温暖,但是像这张照片一样...任何方式您都会喜欢它!评论
如果可以的话,我会为Oh-My-ZSH的建议投反对票。作为在终端中广泛工作的系统工程师,以及试图将zsh / oh-my-zsh纳入我的工作流程的人,我可以坦白地说,我绝不会向任何人推荐ZSH。当然,您可以将zsh符号链接到以任何其他shell命名的文件并模拟该shell,但是这样做时,它不会读取您的.bashrc,.bash_profile等。此外,您不能将模拟bash放在.zprofile或.zshrc文件。对于使用BASH中的高级功能的任何人,都有许多细微之处会吸引您。 BASH是更好的选择。
–查尔斯·亚迪斯
16年7月12日在16:56
ZSH开箱即用的唯一优于BASH的东西是命令完成,但即使在BASH中也可以编程。也许除了偶尔执行平凡的任务以外不使用外壳的人应该采用ZSH,但不适用于需要广泛使用外壳的任何人。 =〜运算符可以咬你,ZSH处理数组的方式可以咬你,等等。在使用ZSH / Oh-My-ZSH大约9个月后,我已经受够了。我使用的是我自己编写的自定义主题,将其移植到BASH并编写了自己的git提示行,而我再也没有回头。现在我不再担心便携性
–查尔斯·亚迪斯
16年7月12日在17:01
“它具有我所见过的最强大的控制台功能之一。其中之一就是为您的终端选择主题。”
–乔纳森·哈特利
16年8月31日在10:32
@JonathanHartley,您的评论似乎不完整。 ?
–通配符
18年8月15日在1:21
谢谢您的关注,但我的评论说了我想说的一切。
–乔纳森·哈特利
18年8月17日在15:25
#10 楼
要查看彩色差异输出,请使用colordiff。sudo apt-get install colordiff
将任何差异格式输出放入colordiff中: br />这包括diff的一些替代格式,例如
-y
(并排。) ',并为输出着色。因此,我在我的.bashrc中有这个名称,将'diff'别名为colordiff。# if colordiff is installed, use it
if type colordiff &>/dev/null ; then
alias diff=colordiff
评论
.bashrc示例缺少最后一个fi,可以将其转换为单行命令:type colordiff&> / dev / null && alias diff ='colordiff'
– Teemu Leisti
19-2-27在8:05
#11 楼
一些文本修饰(粗体)可轻松区分根外壳和非根外壳。对于Zsh:if test $UID = 0
then PS1="%B${PS1}%b "
fi
对于Bash:
if test $UID = 0
then PS1="3[1m${PS1}3[0m"
fi
评论
请指定您的外壳。这个问题的唯一特定于shell的标记是bash,但是我觉得您的代码不是bash。
–manatwork
2012年1月26日上午9:21
@manatwork:对不起,忘了提到它是Zsh。更新了我的帖子。
– Mischa Arefiev
2012年1月26日上午9:53
#12 楼
我只是想知道同样的事情。我有自己的方法,但是我正在寻找替代方法。我在程序调用周围编写bash包装器,并通过
sed
传递其输出。我喜欢sed
的地方是它将立即修改并回显每行=>没有太多缓冲。但是,我不喜欢对包装程序的每次调用都要解析和编译sed
代码。 例如,这就是给
ip
的输出着色的方法:#
# Colorcodes
#
NORMAL=`echo -e '3[0m'`
RED=`echo -e '3[31m'`
GREEN=`echo -e '3[0;32m'`
LGREEN=`echo -e '3[1;32m'`
BLUE=`echo -e '3[0;34m'`
LBLUE=`echo -e '3[1;34m'`
YELLOW=`echo -e '3[0;33m'`
#
# command: ip
# highlight ip addresses, default route and interface names
#
IP4=$GREEN
IP6=$LBLUE
IFACE=${YELLOW}
DEFAULT_ROUTE=$LBLUE
IP_CMD=$(which ip)
function colored_ip()
{
${IP_CMD} $@ | sed \
-e "s/inet [^ ]\+ /${IP4}&${NORMAL}/g"\
-e "s/inet6 [^ ]\+ /${IP6}&${NORMAL}/g"\
-e "s/^default via .*$/${DEFAULT_ROUTE}&${NORMAL}/"\
-e "s/^\([0-9]\+: \+\)\([^ \t]\+\)/${IFACE}${NORMAL}/"
}
alias ip='colored_ip'
#13 楼
为了设置提示,我将其保存在我的.bashrc文件中。#Set variables for foreground colors
fgRed=$(tput setaf 1) ; fgGreen=$(tput setaf 2) ; fgBlue=$(tput setaf 4)
fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6)
fgWhite=$(tput setaf 7) ; fgBlack=$(tput setaf 0)
#Set variables for background colors
bgRed=$(tput setab 1) ; bgGreen=$(tput setab 2) ; bgBlue=$(tput setab 4)
bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6)
bgWhite=$(tput setab 7) ; bgBlack=$(tput setab 0)
#Set variables for font weight and text decoration
B=$(tput bold) ; U=$(tput smul) ; C=$(tput sgr0)
#NOTE: ${C} clears the current formatting
if [[ $USER = "root" ]]; then
PS1="${B}${fgRed}\u${C}@\h(\s): ${fgGreen}\w${C} > "
else
PS1="${B}${fgCyan}\u${C}@\h(\s): ${fgGreen}\w${C} > "
fi
这给了我一个类似于以下内容的提示:
user@host(bash): ~/bin >
工作目录为绿色。用户名是粗体和青色,除非我使用
sudo
运行外壳,在这种情况下,用户名(“ root”)将显示为粗体和红色。我个人真的很喜欢存储格式控制字符在变量中,因为它使阅读用于设置提示的代码更加容易。这也使编辑提示变得更加容易。
我使用
tput
的原因是,它应该比怪异的033[01;31m\]
序列得到更广泛的支持。另外,作为额外的好处,如果在提示符处执行echo $PS1
,您将看到带有颜色的原始提示符,而不是那些难以理解的控制序列。#14 楼
您还可以尝试一个有助于对脚本输出进行着色的项目,该项目在源伪造处的名称为ScriptEchoColor:http://scriptechocolor.sourceforge.net/例如:
自动颜色是可配置的。
这是一个使用它的示例:
#15 楼
用于给命令输出着色的一个很棒的通用Python工具是'colout',给它一个带有N个组的正则表达式,然后用逗号分隔N种颜色的列表。与组匹配的任何文本都将以相应的颜色显示。
因此,例如,如果您正在查看一些测试输出:
python -m unittest discover -v
然后可以使用:
python -m unittest discover -v 2>&1 | colout '(.*ERROR$)|(.*FAIL$)|(\(.*\))' red,yellow,black bold
看看我的正则表达式如何有三组(括号),然后是三种颜色(以及可选的三种样式),但是我使用了速记将所有颜色设置为“粗体”,因此匹配括号中文本的“黑”组显示为深灰色。)
还请注意我如何在Python调用的末尾添加
2>&1
,因为unittest的输出在stderr上,所以我将其转移到stdout以便将其通过管道传递到colout。它通常非常易于使用,以至于我经常发现自己即时创建新的colout调用,并从命令行历史记录中重用或修改它们。
唯一的缺点是它是Python软件包而不是独立的execu表,因此您需要使用pip或
sudo python setup.py install
进行安装。#16 楼
我发现Solarized很有用。它是一个简洁的项目,具有统一的颜色,可用于许多应用程序。http://ethanschoonover.com/solarized
https://github.com/altercation/solarized
#17 楼
您可以在命令行上使用cf来进行文件名着色,这是一种基于awk的快速着色器,可通过管道工作-为Truecolor sRGB中的文件名着色。它具有鲜艳的默认配置,并且与ls不同,它不会因添加新颜色而遭受性能损失。 (ls必须为每个未命中扫描
整个LS_COLORS字符串)。
https://github.com/AdamDanischewski/cf
#18 楼
对于Mac,您可以按照此处指定的方式使用以下内容if [ "$TERM" = xterm ]; then TERM=xterm-256color; fi
#19 楼
我用彩色包装纸。cw是GNU / linux上基于unix的常见命令的非侵入式实时ANSI颜色包装器。 cw旨在模拟正在执行的
命令的环境,因此,如果有人在其shell中键入'du','df','ping'等
,它将自动为输出着色实时根据定义的文件包含所需的颜色格式。 cw支持
通配符匹配着色,标记化着色,页眉/页脚,案例方案
着色,命令行相关的定义着色,并且包括50多个预制的定义文件。 >
这几乎是无缝的,但是一旦我发现交互式shell中的ps与管道中的ps相比会返回不同的输出。
#20 楼
如果您想像我一样使自己的vim
色彩鲜艳,建议您遵循以下两个步骤:通过以下链接了解如何打开此功能:打开
vi或vim。
链接中的关键步骤:
通过键入以下命令编辑〜/ .vimrc文件:vi〜/ .vimrc
追加以下选项:语法on
保存并关闭文件
对其进行测试通过运行vim命令:vim foo.sh
找到所需的配色方案,然后使用它。我使用的方案:我正在使用的方案
评论
使用指向外部源的链接时,应检查指南相关部分的“为链接提供上下文”部分(引用重要部分):unix.stackexchange.com/help/how-to-answer
– Gert van den Berg
18年9月3日在6:48
#21 楼
如果您选择bash,我建议oh-my-bash。如果选择zsh,我建议oh-my-zsh。两者都支持终端的着色和不同的输出。#22 楼
我想谦虚地宣传我最近发布的ta
或textattr,这是一个库和命令行工具,旨在通过将人类可读的规范转换为ANSI转义代码,使添加颜色和属性以美化程序的终端输出变得容易。 例如:
echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"
或更短的:
echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"
或备用:
tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"
会给你类似的东西:
当前该库可用于除了在您最喜欢的shell中使用命令行外,还提供了四种语言C,C ++,D和Python。
请注意,它不会自动使其他程序的输出着色。它是一个实用程序,可以帮助您不必记住复杂的代码。您只需要使用明显的颜色名称或易于记忆的rgb cmyk w(隐藏)(缩写)。
有关更多详细信息,请访问textattr存储库。
评论
我的方法(请参见下面的答案)解决了OSX和Linux差异的问题,例如,一个是ls -G,另一个是ls --color-auto有人看到过为列着色的工具吗?那是-t --color列?