Linux终端提示符PS1设置(颜色)

\d :代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
\# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$

    CentOS中关于这些:
\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


    于是可以根据这些指定自己喜欢的命令提示符格式:

PS1="\u@\h:\w\$ " 
    但是这样设置之后显示的提示符是没有颜色的,如果希望加入颜色设置,可以这样:

PS1="\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\h\e[m:\w\$ " 
    此时,在终端中的显示应该是彩色的提示符了,其中的\e[1;xxm和\e[m就是改变终端字体颜色的部分,前者是修改颜色,后者是恢复到正常显示。但是 这时还会有问题,在提示符中输入第一行时,回车换行不正常,导致显示很混乱,因此,除了这个修改之外,还需要将全部非打印字符用专用的 bash 转义序列 "\[" 和 "\]" 括起来。这两个序列通知 bash,被括起来的字符不占用行上的任何空间 ,这样就使自动换行能够继续正常工作。最终版本如下(可解决带颜色提示符的不换行问题):

PS1="\[ \e[1;32m\] \u\[ \e[m\] \[ \e[1;33m\] @\[ \e[m\]\[ \e[1;35m\] \h\[ \e[m\] :\w\$ "

 

 

 

 

先说BASH:
bash的提示符为 PS1 变量, 默认是 环境变量, 下面包含bash为用户在PS1中所使用的符号的一个完整列表:

\a ASCII 响铃字符(也可以键入 \007)  
\d "Wed Sep 06" 格式的日期          
\e ASCII 转义字符(也可以键入 \033)  
\h 主机名的第一部分(如 "mybox")  
\H 主机的全称(如 "mybox.mydomain.com")  
\j 在此 shell 中通过按 ^Z 挂起的进程数  
\l 此 shell 的终端设备名(如 "ttyp4")  
\n 换行符  
\r 回车符  
\s shell 的名称(如 "bash")  
\t 24 小时制时间(如 "23:01:01")  
\T 12 小时制时间(如 "11:01:01")  
\@ 带有 am/pm 的 12 小时制时间  
\u 用户名  
\v bash 的版本(如 2.04)  
\V Bash 版本(包括补丁级别) ?/td>;  
\w 当前工作目录(如 "/home/drobbins")  
\W 当前工作目录的“基名 (basename)”(如 "drobbins")  
\! 当前命令在历史缓冲区中的位置  
\# 命令编号(只要您键入内容,它就会在每次提示时累加)  
\$ 如果您不是超级用户 (root),则插入一个 "$";如果您是超级用户,则显示一个 "#"  
\xxx 插入一个用三位数 xxx(用零代替未使用的数字,如 "\007")表示的 ASCII 字符  
\\ 反斜杠  
\[ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash 能够正确计算自动换行。  
\] 这个序列应该出现在非打印字符序列之后。  

我所使用的的提示符为 PS1="***** \w *** <\u@\h> ***** \! ***** \t ***\n\$ "
这个提示符, 我很喜欢, 应为他包含了我需要的足够信息如: 工作目录 用户名@机器名 命令编号 以及 时间, 但是他又不至于使 提示符 占用太长, 以至于没有多少空间留下来给 输入的命令, 注意看最后那个 \n 是个换行符, 故而 这是个 2行提示符, $ 独占一行, 留下足够的空间以便输入命令。

然而, 以上的提示符 不过 是我的“初稿”而已, 我还准备把它加上颜色, 使其更加醒目, 且 方便使用。 那么说到这里, 就不得不说一下终端的颜色使用了。(以下颜色是借鉴网上一篇文章而来)

颜色是通过在 PS1 中添加专用序列来选择的 -- 基本上是夹在 "\e["(转义开方括号)和 "m" 之间数字值。如果指定一个以上的数字代码,则用分号将它们分开。
下面是一个颜色代码示例:
"\e[0m"  

如果将数字代码指定为零,则它就会通知终端将前景、背景和加粗设置重置为它们的默认值。您可能会在提示行结束时使用这个代码,以使您键入的文字成为非彩色的。现在,让我们看一下这些颜色代码。请注意下面的抓屏结果:
  

颜色表  
前景          背景              颜色
---------------------------------------
30             40             黑色
31             41             紅色
32             42             綠色
33             43             黃色
34             44             藍色
35             45             紫紅色
36             46             青藍色
37             47             白色


代码              意义
-------------------------
0                 OFF
1                 高亮显示
4                 underline
5                 闪烁
7                 反白显示
8                 不可见
要使用这个表,首先请查找您要使用的颜色,然后查找对应的前景编号 (30-37) 和背景编号 (40-47)。例如,如果您喜欢黑底绿字,则可将编号分别设为 32 和 40。然后打开您的提示行定义并在其中添加适当的颜色代码。下面的定义:

export PS1="\w> "  
变为:  
export PS1="\e[32;40m\w> "  
到现在为止,提示行
尽管已经很不错了,但仍不太完美。在 bash 显示出工作目录以后,我们需要使用 "\e[0m" 序列将颜色重新设置为正常值。  
export PS1="\e[32;40m\w> \e[0m"  

此时我可以加工我以上的 “草稿了”, 将以下写入 .bashrc 或者 .bash_profile(两者有点差别, 主要在 登录shell 与 非登录shell方面, 我还会写一篇 登录shell 与 非登录shell的文章来 详细介绍如何设置这两个文件, 以求最优, 不过在这里 你可以随便写入那个文件)。
# 先设置需要的颜色变量, 分别为 关闭颜色, 黑色, 红色, 绿色, 黄色, 蓝色,紫红色,青蓝色,白色。 注意这里没有写背景色, 你也可以如上 \e[32;40m 这样加入背景色, 来获取更加丰富的颜色方案, 但是这里我认为足够了。
    c_1="\[\e[0m%\]"
    c0="\[\e[30m%\]"
    c1="\[\e[31m%\]"
    c2="\[\e[32m%\]"
    c3="\[\e[33m%\]"
    c4="\[\e[34m%\]"
    c5="\[\e[35m%\]"
    c6="\[\e[36m%\]"
    c7="\[\e[37m%\]"
    PS1="$c0***** $c1\w $c2*** $c3<\u@\h> $c4***** $c5\! $c6***** $c7\t $c1***\n$c2\$ $c_1"; export PS1

这样一个漂亮的 提示符便展现在你的面前。 
注意 最后的 $c_1 , 一定不要忘记, 这个是让终端恢复以前的颜色, 不然你所键入的命令, 显现的文件都将显示为最后 $c2 所定义的颜色。 还有, 细心的人定会发现颜色前后都被加上\[ \]这对符号,以其作用不外乎告诉终端, 这个是不占用终端的空间的, 开始终端编码而已,以便终端能够顺利换行等事情。

TCSH的设置。
我们可以使用的标记列表有:
!    跟%h一样
%B    开始粗体模式
%b    结束粗体
%c    当前工作目录名称的最后部分, 相当于basename $cwd 或者 ${cwd:tail} ${cwd:t}
%c2, %c3等等 最后2,3(等等)部分
%C    与%c类似,但是使用长形式
%d    本周的当天
%D    今天时当月中的第几天
%h    历史编号
%l    shell的当前控制终端
%U    开始下划线
%u    结束下划线
%/    完整目录名
%~    短格式目录
%m    机器名
%n    登录名
%h    历史编号
%P %p %t %T    时间的不同形式。
   .
   .
   .
太多了, 我们用到的也就几个而已,不知道的自己上网GOOGLE吧。

tcsh会读取 .login 和 .cshrc(或者.tcshrc), 登录shell两个文件都读取, 非登录shell只读取 .cshrc. 而提示符tcsh下使用的是 prompt 通常不设定为环境变量, 设为shell变量即可。 以下便是 上面PS1版本在TCSH下 prompt的设定。

set c_1 = "%{\e[0m%}"
set c0 = "%{\e[30m%}"
set c1 = "%{\e[31m%}"
set c2 = "%{\e[32m%}"
set c3 = "%{\e[33m%}"
set c4 = "%{\e[34m%}"
set c5 = "%{\e[35m%}"
set c6 = "%{\e[36m%}"
set c7 = "%{\e[37m%}"
set prompt = "$c1***** $c2%/ $c3*** $c4<%U`whoami`%u@%m> $c5*** $c6%h$c_1 $c7***** $c1%P $c2***\n$c3%%$c_1 "

注意, bash设置变量直接写 x="..."这样,但是tcsh要有set。 %{ %}就相当于bash下的\[ \]

posted on 2013-11-05 20:01  游戏开发:主席  阅读(3066)  评论(0编辑  收藏  举报

导航