个性化-命令提示符(Prompt)

bash是一个指挥操作系统的好工具,当你进入到这台系统的shell界面,发现各式各样的提示符会否使你头疼?由于linux系统太过自由,不管是root用户还是普通用户,都能对各自的提示符个性化设置,本文在此介绍对普通用户和全体用户的提示符个性化设置。

介绍

  在默认情况下,用户登录bash看到的提示符为:

1
2
[root@主机名 ~]# 	#root用户
[user@主机名 ~]$ #用户名为user

  能看的出,针对不同的用户会出现不同的命令提示符,并且root用户的标识是#,普通用户的标识是$。

  有了发现之后,我首先是去寻找当前用户下的配置文件(~/.bashrc),结果没有任何发现,然后去寻找全局的配置文件(/etc/bashrc),里面存在对Prompt的设置变量 $PS1

1
PS1="[\u@\h \W]\\$

  bash会在被加载时读取它,并按照如下规则显示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\e 控制符\033

\u 当前用户

\h 主机名简称

\H 主机名

\w 当前工作目录(全路径)

\W 当前工作目录基名

\t 24小时时间格式

\T 12小时时间格式

! 命令历史数

# 开机后命令历史数

实现个性化设置

效果展示

  [zyming@A1:192.168.93.128 losingMyPieces]$

  配置如下:

1
export PS1="[\[\e[1;31m\]\u@\h:\[\e[33m\]\$(hostname -I | awk '{print \$1}')\[\e[1;32m\] \W]\[\e[0m\]\\$"

  配置解释:

  1. [\e[颜色码m] :“\e”为转义符,“[颜色码m” 定义颜色和样式(与ASCII码对应),\[\]表示这部分是控制代码;
  2. $(hostname -I | awk ‘{print $1}’):-I 主机的所有ip地址,awk取第一个;
  3. \$ :“\$”动态替换为“$”或“#”,普通用户=$,root=#。由于在双引号 “ “ 内,$会被解析为变量前缀(如 $PATH),因此需要转义为\$ 表示字面意义的 $,同时写成“\\$”才能正常转义“\$”。

  本文的主机名是修改过的,如有需要本文在此提供修改步骤:

1
2
3
hostnamectl set-hostname [new name] # 或者直接修改/etc/hostname为new name

重新打开shell

生效范围

临时生效

  将下列指令复制进shell回车

1
export PS1="[\[\e[1;31m\]\u@\h:\[\e[33m\]\$(hostname -I | awk '{print \$1}')\[\e[1;32m\] \W]\[\e[0m\]\\$"

对某个用户永久生效

  登录进当前用户,编辑~/.bashrc,将指令添加进最后一行

1
2
3
4
5
export PS1="[\[\e[1;31m\]\u@\h:\[\e[33m\]\$(hostname -I | awk '{print \$1}')\[\e[1;32m\] \W]\[\e[0m\]\\$"

source ~/.bashrc

重新打开shell

对所有用户生效

  使用root编辑/etc/bashrc,将指令添加进最后一行

1
2
3
4
5
export PS1="[\[\e[1;31m\]\u@\h:\[\e[33m\]\$(hostname -I | awk '{print \$1}')\[\e[1;32m\] \W]\[\e[0m\]\\$"

source /etc/bashrc

重新打开shell

  注意,如果同时存在当前用户的配置和对系统的配置,优先生效当前的配置。

  ‍