关于PS1的小小折腾

SHELL2011-11-12 17:06

笔者今天折腾了不少东西,其中一个是Bash Shell的PS1(续行是PS2),也就是那个所谓的提示符~嗯,先把没有修改之前的默认设置记下:

ROOT:PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '

USER:PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '

然后下面的是笔者修改过后的PS1,嗯,个人觉得很好用:(你可以写到"~/.bashrc"或者"/etc/bash.bashrc"中)

ROOT:PS1='\[\e]2;[\d] -- [\u@\H] -- [\w]\a\]`rv=$?;if [ $rv -ne 0 ]; then echo -n -e "\[\e[07m\]{$rv}\[\e[00m\]"; fi`\[\e[01;34m\][\t] \[\e[01;33m\]\h \[\e[01;36m\]\W \[\e[01;31m\]\$ \[\e[00m\]'

USER:PS1='\[\e]2;[\d] -- [\u@\H] -- [\w]\a\]`rv=$?;if [ $rv -ne 0 ]; then echo -n -e "\[\e[07m\]{$rv}\[\e[00m\]"; fi`\[\e[01;35m\][\A] \[\e[01;32m\]\u \[\e[01;34m\]\W \[\e[01;36m\]\$ \[\e[00m\]'

这个是效果图:
ScreenshotTerminal

然后附上一些在网上找到的资料:
(关于转义字符)

\a      ASCII响铃字符(等同\007)
\A      24小时制时间(没有秒数)
\d      输出"Wed Sep 06"格式的日期
\e      ASCII转义字符(等同\033)
\h      主机名的第一部分(如"icyomik")
\H      主机名的全称(如"icyomik.example.com")
\j      在当前SHELL中通过按^Z挂起的进程数
\l      当前SHELL的终端设备名
\n      换行符
\r      回车符
\s      SHELL的名称(如"bash")
\t      24小时制时间(如"23:01:01")
\T      12小时制时间(如"11:01:01")
\u      当前用户的名称
\v      Bash版本
\V      Bash版本(包括补丁级别)
\w      当前工作目录(绝对路径)
\W      当前工作目录(basename)
\!      当前命令在历史缓冲区中的位置
\@      带有AM/PM的12小时制时间
\#      命令编号(你输入的第多少个命令)
\$      如果不是超级用户(root),则插入一个"$";否则显示一个"#"
\[      这个序列应该出现在不移动光标的字符序列之前(如颜色转义序列)
\]      这个序列应该出现在非打印字符序列之后(同上者构成一个伪作用域)

备注:被\[和\]括起来的字符,将作为非打印字符用于PS1、PS2显示颜色和格式,不应该省略。
当没有这两个转义序列时,而如果你键入的命令又恰好到达终端的最右端,就会造成显示的混乱。

(关于颜色,格式:\[\e[X;Ym\],X、Y指颜色的数值)
颜色对应关系:(30~37为前景色,40~47为背景色,具体可以"man dir_colors")

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

其他颜色代码:

00 OFF
01 高亮(粗体)
04 下划线
05 闪烁(没有效果?)
07 反白显示
08 不可见

下面是一个比较好用的特殊格式,用于设置标题栏(用你要的字符替换其中的TITLE_VALUES即可):
\[\e]2;TITLE_VALUES\a\]

好了,关于PS1、PS2提示符,笔者用到的大概就这么多了,至于其他可以自己GOOGLE一下~


原文链接: http://blog.jtwo.me/little-toss-about-ps1