Ps1 环境变量相关

注:本文中终端均以bash shell为例,其他终端仅供参考。

简介
PS1是linux下的shell提示行环境变量,通过对其定制,可以得到非常漂亮的提示行。 而且在linux的终端下控制色彩是非常简单的一件事,用控制字符就可以做得到,所以提示行也可以变成彩色的。

更改PS1环境变量很简单,只需执行

export PS1="bash" #将bash替换为自己想要的内容即可。

一般distro默认的是"\u@\h:\w$"之类的,我们可以在此基础上进行定制。

提示符
可以在bash的man page中找到以下内容:

提示符(PROMPTING)
在交互执行时,bash在准备好读入一条命令时显示主提示符PS1,在需要更多的输入来完成一条命令时显示PS2。Bash
允许通过插入一些反斜杠转义的特殊字符来定制这些提示字符串,这些字符被如下解释:
              \a     一个 ASCII 响铃字符 (07)
              \d     日期,格式是 "星期 月份 日" (例如,"Tue May 26")
              \D{format}
                     format被传递给strftime(3),结果被插入到提示字符串中;
		     空的format将使用语言环境特定的时间格式,花括号是必需的。
              \e     一个 ASCII 转义字符 (033)
              \h     主机名,第一个 `.' 之前的部分
              \H     主机名
              \j     shell 当前管理的作业数量
              \l     shell 的终端设备名的基本部分
              \n     新行符
              \r     回车
              \s     shell 的名称, $0 的基本部分 (最后一个斜杠后面的部分)
              \t     当前时间,采用 24小时制的 HH:MM:SS 格式
              \T     当前时间,采用 12小时制的 HH:MM:SS 格式
              \@     当前时间,采用 12小时制上午/下午 (am/pm) 格式
              \A     当前时间,采用 24小时制上午/下午格式
              \u     当前用户的用户名 the username of the current user
              \v     bash 的版本 (例如,2.00)
              \V     bash 的发行编号,版本号加补丁级别 (例如,2.00.0)
              \w     当前工作目录
              \W     当前工作目录的基本部分
              \!     此命令的历史编号
              \#     此命令的命令编号
              \$     如果有效 UID 是 0,就是 #, 其他情况下是 $
              \nnn   对应八进制数 nnn 的字符
              \\     一个反斜杠
              \     一个不可打印字符序列的开始,可以用于在提示符中嵌入终端控制序列
              \]     一个不可打印字符序列的结束

以上提示符均可用在PS1中。

色彩控制
颜色设置的格式如下

    \\033[C;F;Bm\]
    \\e[C;F;Bm\]
    \^[C;F;Bm\] #^是一个字符,按下C-v后安Esc即可,单独输入^与无效

以上三种方式皆可,但要切记加\和],否则终端显示会乱掉的
其中F是前景色,B是背景色,C是代码
具体颜色可以参照下表

前景          背景              颜色  
---------------------------------------  
30             40             黑色  
31             41             紅色  
32             42             绿色  
33             43             黄色  
34             44             蓝色  
35             45             紫红色  
36             46             青蓝色  
37             47             白色

代码表

代码              意义  
-------------------------  
0                 关闭  
1                 高亮显示  
4                 下划线  
5                 闪烁  
7                 反白显示  
8                 不可见

git分支显示
这个其实git本身就自带,在/etc/bash_completion.d/git-prompt.sh文件中就有__git_ps1(),想要在PS1中调用也非常简单

“’$(__git_ps1 “(%s)”)’”

设置
具体的设置就看个人喜好了,下面贴一下我的

if  ${EUID} == 0 ]] ; then
        ps1_color="\\033[0;31m\]";
        user_host="\h"
else
        ps1_color="\\033[0;34m\]";
        user_host="\\033[0;36m\]\u\\033[0;31m\]@\\033[0;32m\]\h"
fi
export PS1="$ps1_color\342\224\214\342\224\200\\$]\342\224\200$(ppwd)$user_host$ps1_color]\342\224\200\\033[32m\]\w"'$(__git_ps1 "(%s)")'"$ps1_color]\342\224\200\t$ps1_color]\n$ps1_color\342\224\224\342\224\200>\\033[0m\]"
unset ps1_color user_host

简单的预览

这个在终端登陆时可以吗?话说以前的 suse 终端登陆后是有图片背景的,好几年前

可以的,上边的代码放到 /etc/bash.bashrc,当 bash shell 被打开时, 这个文件就会被读取的。

nice~