当前位置: 代码迷 >> 综合 >> 【Linux】环境变量 PS1 设置 Bash 提示符的样式
  详细解决方案

【Linux】环境变量 PS1 设置 Bash 提示符的样式

热度:98   发布时间:2023-12-06 13:30:08.0

使用环境变量 PS1 设置 Bash 提示符的样式.

文章目录

      • 1. 内容模式
      • 2. 格式与颜色
      • 3. 配置文件设置

1. 内容模式

在常用环境变量中已经已经介绍过 PS1 变量,主要由下表的转义字符组成:

\d 代表日期,格式为weekday month date,例如:“Mon Aug 1”
\H 完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h 仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t 显示时间为24小时格式,如:HH:MM:SS
\T 显示时间为12小时格式
\A 显示时间为24小时格式:HH:MM
\u 当前用户的账号名称
\v BASH的版本信息
\l 显示登陆的终端号
\w 完整的工作目录名称。家目录会以 ~代替
\W 利用basename取得工作目录名称,所以只会列出最后一个目录
/! 命令行动态统计历史命令次数
\# 下达的第几个命令
\$ 提示字符,如果是root时,提示符为:# ,普通用户则为:$

例如
CentOS 中默认

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

Ubuntu 中默认

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

等效于

PS1='\u@\h:\w\$ '

下面内容用于在终端标题处显示当前目录

${debian_chroot:+($debian_chroot)}

2. 格式与颜色

PS1 控制格式与颜色的方法与《控制 Bash 输出的格式与颜色》中类似,但是需要用 \[\]\033[控制字符m......\033[0m 包裹起来,避免出现格式混乱.

”\[\033[控制字符m......\033[0m\]

将下面代码用 ; 连接排列放在上面控制字符的部分. 不区分先后,可多种效果叠加:

  • 格式代码:FF∈{1,2,3,4,5,7,8}
  • 前景 8/16 色彩代码:FgC16FgC16∈{30,…,37,39,90,…,97}
  • 背景 8/16 色彩代码:BgC16BgC16∈{40,…,47,49,100,…,107}
  • 前景 88/256 色彩代码:38;5;C256C256∈{0,1,…,255}
  • 背景 88/256 色彩代码:48;5;C256C256∈{0,1,…,255}

具体效果参看《控制 Bash 输出的格式与颜色》.

例如:
Ubuntu16.04 中彩色提示符设置如下:

PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

3. 配置文件设置

设置 Ubuntu 格式的命令提示符. 如《环境变量配置文件》所述,在 ~/.bashrc 文件末尾添加以下内容:

# self-defined PS1
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

最好在以下内容之前添加内容

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1";;
*);;
esac

添加

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

如下

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1";;
*);;
esac

设置 CentOS 格式的命令提示符:

export PS1="\[\033[01;35m\][\[\033[00m\]\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]\[\033[01;35m\]]\[\033[00m\]\$ "