PS1的用法

antark 于 2025/5/30 时间写成
shell

PS1可以用来定制Linux、Mac bash终端的命令提示符(zsh是另外一套逻辑)。譬如将下面的命令拷贝到 ~/.bash_profile 或是 ~/.bashrc 中

PS1='\[\e[1;32m\]\u@\H\[\e[0m\]:\[\e[34m\]\W\[\e[0m\]\[\e[31m\]$(parse_git_branch)\[\e[0m\] \$'

显示效果如下:

wenqiong@lrj.name:GIT (main) $

其中每一部分的含义:

  1. \[\e[1;32m\]
    • \[ 和 \] : 不可打印字符的开始、结束,告诉shell这中间是不可见字符,计算光标位置的时候不计算字符长度;
    • \e[ : ANSI转义符(ESC字符,ASCI中十进制27、十六进制1B、八进制033),有些地方是显示\033 其实是一个意思;
    • 1 : SGR(Select Graphic Rendition,终端跟字体相关的一个规范)参数,粗体;
    • ; : 分隔符;
    • 32 : SGR参数,字体颜色是绿色;
    • m : SGR结束符;
  2. \u : 登陆用户的用户名
  3. @ : 普通 @ 符号
  4. \H : 主机全名称,而 \h 是主机名称.的前面部分;
  5. \[\e[0m\] : 其中 \e[0m : 将ANSI转义重置到默认值,清除字体颜色等等,\[ 和 \]含义同前面;
  6. : 普通字符,冒号:;
  7. \[\e[34m\] : 34 蓝色,其他部分含义同前面;
  8. \W : 当前的目录名,而 \w 则是当前目录的全路径;
  9. \[\e[0m\] : 重置到默认值,清除字体颜色等,同前面解释;
  10. \[\e[31m\] : 31 红色,其他部分含义同前面;
  11. $(parse_git_branch) : 这个是自定义的函数,显示当前git的分支名,如果不是git目录则为空;实现如下:
    parse_git_branch() {
        git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
    }
    
  12. \[\e[0m\] : 重置到默认值,清除字体颜色等,同前面解释;
  13. \$ : 美元$符号;

SGR定义的数值有:30 - 黑色,31 - 红色,32 - 绿色,33 - 黄色,34 - 蓝色, 35 - 品红色,36 - 青色,37 - 白色, 40 ~ 47 对应的是是背景色黑色到白色。0 - 重置,1 - 粗体,2 - 柔和(不一定广泛会吃),3 - 斜体(不一定广泛支持),4 - 下划线, 5 - 闪烁,9 - 删除线, 22 - 普通强度,24 - 关闭下划线,25 - 关闭闪烁,29 - 关闭删除线。数字可以组合,譬如:\e[1;3;31m 如果斜体被支持,就会显示粗体、斜体的红色文本。


评论:

发表评论: