Linux下命令提示符的修改,PS1的个项参数详解

Posted dreamfreedom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下命令提示符的修改,PS1的个项参数详解相关的知识,希望对你有一定的参考价值。

1. 需要解决的问题

  1.在linux下虽然很方便,但是当登录多个服务器,或者有时需要去分辨这些问题,这无疑是很大的不方便,假如有一种方法能轻易分辨那就很方便了。

  2.没错,就是有这样的方法,那就是修改PS1环境变量,具体参数及用法实验,我们接下来看。

2. 对PS1的分析

  2.1 本次操作系统,Ubuntu

  2.3 首先我来看看我现在命令行,显示如下:

linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$ 
linoxwong@Ubuntu1901-64:~$

 技术图片

看见了吧,这就是我当前命令提示符,我们来把我当前的提示符(linoxwong@Ubuntu1901-64:~$)拆开看看
在拆解前我们先做一件事情,先执行一个命令,显示如下:
1 linoxwong@Ubuntu1901-64:~$ echo $PS1
2 [e]0;u@h: wa]${debian_chroot:+($debian_chroot)}u@h:w$
3 linoxwong@Ubuntu1901-64:~$ 
我们执行echo $PS1 得到一个结果([e]0;u@h: wa]${debian_chroot:+($debian_chroot)}u@h:w$),这个结果我们用到的只有后面的“ u@h:w$
好了,自此我们来拆解 linoxwong@Ubuntu1901-64:~$ 与 u@h:w$
  linoxwong ----------------------- 当前我的用户名 对应 u
  @ 对应的就是 @
  Ubuntu1901-64 -------------------- 当前我的主机名 对应 h
  : 对应 :
  ~ ------------------------------ 当前的所在的目录 对应 w 因为是我当前在家目录 正好是 ~ 代表的就是家目录
  $ ------------------------------ 对应的就是 $ 这里注意一点,普通用户$ 如果是root用户的话是#
root@Ubuntu1901-64:~# 
root@Ubuntu1901-64:~# 
root@Ubuntu1901-64:~# 
root@Ubuntu1901-64:~# 
  
3.1 由上的分析,我们知道了 /u /w /h 等 分别代表 ,用户,当前目录,主机,当然还有其它的分别含义,列出如下:

  d :代表日期,格式为weekday month date,例如:"sun Sep 21"


  H :完整的主机名称


  h :仅取主机名中的第一个名字


   :显示时间为24小时格式,如:HH:MM:SS


  T :显示时间为12小时格式


  A :显示时间为24小时格式:HH:MM


  u :当前用户的账号名称


  v :BASH的版本信息


  w :完整的工作目录名称


  W :利用basename取得工作目录名称,只显示最后一个目录名


  # :下达的第几个命令


  $ :提示字符,如果是root用户,提示符为 # ,普通用户则为 $

 

  \\   反斜杠


  [   这个序列应该出现在非打印字符序列之前。


  ]   这个序列应该出现在非打印字符序列之后。

  例如:[这里的东西不会被echo打印]    [ 与 ]  之间的内容有些类似注释的  

3.2 除了以上外,命令提示符可以设置颜色,这是很棒的一点,颜色来区分再好不过
  以 e[f;bm 是设置颜色的格式 f,是字体颜色, b,所表示是命令行的背景颜色,记得后面的 m 要带上,以下是颜色表:

    30  40 黑色

    31  41 红色

    32  42 绿色

    33  43 黄色

    34  44 蓝色

    35  45 紫红色

    36  46 青蓝色

    37  47 白色

例如:我要设置字体为蓝色,背景为红色的提示符注意,f,的取值范围是30~37,b 取值范围 40~47,所以我们得到了 e[34;41m,
现在我们在把 刚刚得到的PS1的
u@h:w$前面加上 e[34;41m, 最终得到如下:
[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}e[34;41mu@h:w$

我们来测试是不是有效果,如果得到的是蓝字红底的那就对了 请看如下演示:
root@Ubuntu1901-64:~$PS1="[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}e[34;41mu@h:w$"

技术图片

有图有真相,蓝字红底,如你所见。但是这样会有一个问题,是什么呢?接下来看

3.3 成功的设置为蓝字红底之后还有问题,有什么问题呢,你试着在命令提示符后面输入一些命令,如图下:
技术图片

发现问题没有,当我输入命令以后,系统会之后所有的输出都变成了我们刚刚设置的颜色,如此这样过于花哨跟抢眼,不太好,所以,我们继续修改PS1的值,
应该怎么改呢? 很简单 在刚刚的后面我们加点东西。

[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}e[34;41mu@h:w$e[0m

我们再来测试:
PS1=[e]0;PS1=[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}e[34;41mu@h:w$e[0m

技术图片

以图为证明,这样我能清晰一目了然的看到输出的结果了。

虽然这样达到了我想要的效果,但是最好的在刚刚对PS1的修改中加上 [ , ] 把对颜色的设置放入 [ 与 ]中这样才好,比如
e[34;41m  加上 []  改为  [e[34;41m]
e[0m   
加上 [] 改为 [e[0m]
因为这是相当于注释了对颜色的设置,不会被输出,本机并没有被输入,但是那只是对本机而言,某些时候会被输出并且对颜色的设置无效。
所以最后对PS1的修改为:
[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}[e[34;41mu@h:w$e[0m[
毕竟标准才能通用。
当然,你还能对用户名,主机名,当前目录做不同颜色的显示 放一个例子 其他的自行体会
例:用户名设为蓝色 主机名设为白色 目录设为红色

root@Ubuntu1901-64 /etc#PS1=‘[e[34;40m]u@[e[37;40m]h [e[31;40m]w$[e[0m]‘

技术图片

[e[34;40m]u   @[e[37;40m]h    [e[31;40m]w   $  [e[0m]
要实现上面类似的效果,以颜色做分割就可以了


4.永久性修改PS1
  4.1 以上的对PS1的修改都是本次登录才有效,重新登录之后就没有效果了,
  所以要永久性修改就去改用户家目录下的.bashrc文件吧,要对所用的用户起作用去改/etc下的配置文件吧
5.
总结
  对PS1的修改还能有很多方式,如高亮,在字体前面加上1就可以的 如 [e[1;34;40m]
  修改了之后方便更好的分区当前所在的服务器,更好的知道输出地方。


 



 
 

以上是关于Linux下命令提示符的修改,PS1的个项参数详解的主要内容,如果未能解决你的问题,请参考以下文章

linux 命令提示符修改详细介绍

Linux 下PS1 PS2 PS3 PS4 提示符详解

修改linux环境变量使终端命令行颜色和样式改变

linux(centos7)命令提示符优化

linux修改终端输入见面颜色

修改bash终端命令行颜色