最新消息:阿啰哈,本人90后,目前单身,欢迎妹子们来撩!.(。→‿←。)

美化bash提示符

Shell 林志斌 1014浏览

Ubuntu继承了Linux的一贯作风:命令行就是一切,所有图形界面搞的定搞不定的问题,都可以在命令行下解决。然而经常在命令行下工作,不免对其单 调的色彩感到乏味。幸好Linux Console的设计者早就料到了这(估计他也被命令行折腾的够呛),给我们预留了许多常用颜色,如下所示:

这些颜色可以被用来美化一条常用命令:ls 和console prompt,我们一个一个来看:

美化ls输出

ls命令默认并不开启着色,若要开启,则必须使用–color指明。幸好我们可以使用别名把这个常用配置开启。开启后,我们仅需要修改环境变量LS_COLORS即可达到改变配色方案的目的。LS_COLORS包含了一些用冒号隔开的赋值语句,每一个语句都为特定类型的文件选定一种配色(包括是否标志,前景色,背景色)。赋值语句的写法为:<类型>=<配色>。类型分为两种,一种是预定义类型(如下),另一种则是文件扩展名匹配。

# 类型
di = directory
fi = file
ln = symbolic link
pi = fifo file
so = socket file
bd = block (buffered) special file
cd = character (unbuffered) special file
or = symbolic link pointing to a non-existent file (orphan)
mi = non-existent file

标志有以下几种:

# 标志
0   = default colour  默认设置
1   = bold            加粗
4   = underlined      下划线
7   = reverse field   前景/背景色互换

颜色的定义有些不同,前景色被定义为30到37这8个数字,而背景色则被定义为40到47这8个数字(详情请参见上图,行为同前景色,列为同背景色)。配色的写法为:<标志>;<前景>;<背景>,例如前景为红,背景为黑的加粗字体为:1;31;40。前景色和背景色可以忽略,例如0表示不加粗并沿用之前的配色,1;30表示加粗并使用黑色为前景色,沿用之前的背景色。 例如: di=1;34 表示目录名加粗蓝色 *.py=0;35  表示python文件不加粗紫色 知道了这些之后,就可以在现有LS_COLORS之上加入我们想要的配色方案(添加在~/.bashrc最后)

aliasls='ls --color'
LS_COLORS+="*.py=;;42:*.java=;;45:"
exportLS_COLORS
# python文件背景色为绿色
# java文件背景色为紫色

美化命令行提示(Console prompt)
Linux命令行提示不仅仅可以是彩色的,而且可以自己选择需要显示的信息!改变一个环境变量PS1的值,既可以立即改变你的提示行,酷吧?看看有哪些信息可以显示:

# 可显示的信息
\a         an ASCII bell character (07)
\d         the date in "Weekday Month Date" format (e.g., "Tue May 26")
\D{format} the format is passed to strftime(3) and the result
           is inserted into the prompt string an empty format
           results in a locale-specific time representation.
           The braces are required
\e         an ASCII escape character (033)
\h         the hostname up to the first `.'
\H         the hostname
\j         the number of jobs currently managed by the shell
\l         the basename of the shell's terminal device name
\n         newline
\r         carriage return
\s         the name of the shell, the basename of $0 (the portion following
           the final slash)
\t         the current time in 24-hour HH:MM:SS format
\T         the current time in 12-hour HH:MM:SS format
\@         the current time in 12-hour am/pm format
\A         the current time in 24-hour HH:MM format
\u         the username of the current user
\v         the version of bash (e.g., 2.00)
\V         the release of bash, version + patch level (e.g., 2.00.0)
\w         the current working directory, with $HOME abbreviated with a tilde
\W         the basename of the current working directory, with $HOME
           abbreviated with a tilde
\!         the history number of this command
\#         the command number of this command
\$         if the effective UID is 0, a #, otherwise a $
\nnn       the character corresponding to the octal number nnn
\\         a backslash
\[         begin a sequence of non-printing characters, which could be used
           to embed a terminal control sequence into the prompt
\]         end a sequence of non-printing characters

结合上面的例子,提示的颜色也使用类似的定义方式,只是现在除了指定配色方案之外,还需要在颜色前加‘e[‘并在之后加’m’,
例如:

PS1='\e[0;32m\[email protected]\H:\e[0;31m\w$ \e[0m'
# 命令行提示为:   <用户>@<机器名>:<工作目录>$
# 其中冒号前为绿色,冒号后为红色

个人正在使用的配置如下(~/.bashrc):

# 注意:这会导致bash不能正常显示过长命令,替代方案如下文所述
PS1="\e[01;33m\A \e[01;35m\u\e[01;[email protected]\e[01;32m\h\[\e[00m [\e[01;34m\W\e[0m] "  # put in ~/.bashrc

结合以上两个美化,结果如下图:

替代方案:以上的美化命令行操作会导致bash不能正确显示较长命令行(主要是会覆盖命令提示行,多谢NickMouse同学指正),研究了小半个下午,终于发现了除e[xx;xx;xxm之外的另一种颜色定义方法:tput,以下的片段定义了8种常用颜色,使用方法就见PS1的定义,大家就自己揣摩下吧:)

# add these lines to ~/.bashrc
# colors defined with tput
Black="$(tput sgr0 ; tput setaf 0)"
Red="$(tput sgr0 ; tput setaf 1)"
Green="$(tput sgr0 ; tput setaf 2)"
Yellow="$(tput sgr0 ; tput setaf 3)"
Blue="$(tput sgr0 ; tput setaf 4)"
Purple="$(tput sgr0 ; tput setaf 5)"
Cyan="$(tput sgr0 ; tput setaf 6)"
White="$(tput sgr0 ; tput setaf 7)"
# bold colors
BlackBold="$(tput bold ; tput setaf 0)"
RedBold="$(tput bold ; tput setaf 1)"
GreenBold="$(tput bold ; tput setaf 2)"
YellowBold="$(tput bold ; tput setaf 3)"
BlueBold="$(tput bold ; tput setaf 4)"
PurpleBold="$(tput bold ; tput setaf 5)"
CyanBold="$(tput bold ; tput setaf 6)"
WhiteBold="$(tput bold ; tput setaf 7)"
# backgroud colors
BlackBG="$(tput setab 0)"
RedBG="$(tput setab 1)"
GreenBG="$(tput setab 2)"
YellowBG="$(tput setab 3)"
BlueBG="$(tput setab 4)"
PurpleBG="$(tput setab 5)"
CyanBG="$(tput setab 6)"
WhiteBG="$(tput setab 7)"
NC="$(tput sgr0)" # No Color
 
export PS1="\[$YellowBold\]\A \[$PurpleBold\]\u\[$Yellow\]@\[$GreenBold\]\h \[$NC\][\[$BlueBold\]\W\[$NC\]] "

via: https://lifepy.wordpress.com/2010/10/29/56/

转载请注明:林志斌 » 美化bash提示符

发表评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址