个性化-命令提示符(Prompt)
bash是一个指挥操作系统的好工具,当你进入到这台系统的shell界面,发现各式各样的提示符会否使你头疼?由于linux系统太过自由,不管是root用户还是普通用户,都能对各自的提示符个性化设置,本文在此介绍对普通用户和全体用户的提示符个性化设置。
介绍
在默认情况下,用户登录bash看到的提示符为:
1 | [root@主机名 ~]# #root用户 |
能看的出,针对不同的用户会出现不同的命令提示符,并且root用户的标识是#,普通用户的标识是$。
有了发现之后,我首先是去寻找当前用户下的配置文件(~/.bashrc),结果没有任何发现,然后去寻找全局的配置文件(/etc/bashrc),里面存在对Prompt的设置变量 $PS1
1 | PS1="[\u@\h \W]\\$ |
bash会在被加载时读取它,并按照如下规则显示:
1 | \e 控制符\033 |
实现个性化设置
效果展示
[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\]\\$" |
配置解释:
- [\e[颜色码m] :“\e”为转义符,“[颜色码m” 定义颜色和样式(与ASCII码对应),\[\]表示这部分是控制代码;
- $(hostname -I | awk ‘{print $1}’):-I 主机的所有ip地址,awk取第一个;
- \$ :“\$”动态替换为“$”或“#”,普通用户=$,root=#。由于在双引号 “ “ 内,$会被解析为变量前缀(如 $PATH),因此需要转义为\$ 表示字面意义的 $,同时写成“\\$”才能正常转义“\$”。
本文的主机名是修改过的,如有需要本文在此提供修改步骤:
1 | hostnamectl set-hostname [new name] # 或者直接修改/etc/hostname为new name |
生效范围
临时生效
将下列指令复制进shell回车
1 | export PS1="[\[\e[1;31m\]\u@\h:\[\e[33m\]\$(hostname -I | awk '{print \$1}')\[\e[1;32m\] \W]\[\e[0m\]\\$" |
对某个用户永久生效
登录进当前用户,编辑~/.bashrc,将指令添加进最后一行
1 | export PS1="[\[\e[1;31m\]\u@\h:\[\e[33m\]\$(hostname -I | awk '{print \$1}')\[\e[1;32m\] \W]\[\e[0m\]\\$" |
对所有用户生效
使用root编辑/etc/bashrc,将指令添加进最后一行
1 | export PS1="[\[\e[1;31m\]\u@\h:\[\e[33m\]\$(hostname -I | awk '{print \$1}')\[\e[1;32m\] \W]\[\e[0m\]\\$" |
注意,如果同时存在当前用户的配置和对系统的配置,优先生效当前的配置。