命令提示符

阮一峰 ... Linux
  • Bash
大约 4 分钟

用户进入 Bash 以后,Bash 会显示一个命令提示符,用来提示用户在该位置后面输入命令。

# 环境变量 PS1

命令提示符通常是美元符号 $,对于根用户则是井号 #。这个符号是环境变量 PS1 决定的,执行下面的命令,可以看到当前命令提示符的定义。

echo $PS1
1

Bash 允许用户自定义命令提示符,只要改写这个变量即可。改写后 的PS1,可以放在用户的 Bash 配置文件 .bashrc 里面,以后新建 Bash 对话时,新的提示符就会生效。要在当前窗口看到修改后的提示符,可以执行下面的命令。

source ~/.bashrc
1

命令提示符的定义,可以包含特殊的转义字符,表示特定内容。

  • \a: 响铃,计算机发出一记声音。
  • \d: 以星期、月、日格式表示当前日期,例如“Mon May 26”。
  • \h: 本机的主机名。
  • \H: 完整的主机名。
  • \j: 运行在当前 Shell 会话的工作数。
  • \l: 当前终端设备名。
  • \n: 一个换行符。
  • \r: 一个回车符。
  • \s: Shell 的名称。
  • \t: 24 小时制的 hours:minutes:seconds 格式表示当前时间。
  • \T: 12 小时制的当前时间。
  • \@: 12 小时制的 AM/PM 格式表示当前时间。
  • \A: 24 小时制的 hours:minutes 表示当前时间。
  • \u: 当前用户名。
  • \v: Shell 的版本号。
  • \V: Shell 的版本号和发布号。
  • \w: 当前的工作路径。
  • \W: 当前目录名。
  • \!: 当前命令在命令历史中的编号。
  • \#: 当前 shell 会话中的命令数。
  • \$: 普通用户显示为 $ 字符,根用户显示为 # 字符。
  • \[: 非打印字符序列的开始标志。
  • \]: 非打印字符序列的结束标志。

举例来说,[\u@\h \W]\$ 这个提示符定义,显示出来就是 [user@host ~]$ (具体的显示内容取决于您的系统)。

[user@host ~]$ echo $PS1
[\u@\h \W]\$
1
2

改写 PS1 变量,就可以改变这个命令提示符。

$ PS1="\A \h \$ "
17:33 host $
1
2

注意,$ 后面最好跟一个空格,这样的话,用户的输入与提示符就不会连在一起。

# 颜色

默认情况下,命令提示符是显示终端预定义的颜色。Bash 允许自定义提示符颜色。

使用下面的代码,可以设定其后文本的颜色。

  • \033[0;30m: 黑色
  • \033[1;30m: 深灰色
  • \033[0;31m: 红色
  • \033[1;31m: 浅红色
  • \033[0;32m: 绿色
  • \033[1;32m: 浅绿色
  • \033[0;33m: 棕色
  • \033[1;33m: 黄色
  • \033[0;34m: 蓝色
  • \033[1;34m: 浅蓝色
  • \033[0;35m: 粉红
  • \033[1;35m: 浅粉色
  • \033[0;36m: 青色
  • \033[1;36m: 浅青色
  • \033[0;37m: 浅灰色
  • \033[1;37m: 白色

举例来说,如果要将提示符设为红色,可以将 PS1 设成下面的代码。

PS1='\[\033[0;31m\]<\u@\h \W>\$'
1

但是,上面这样设置以后,用户在提示符后面输入的文本也是红色的。为了解决这个问题, 可以在结尾添加另一个特殊代码 \[\033[00m\],表示将其后的文本恢复到默认颜色。

PS1='\[\033[0;31m\]<\u@\h \W>\$\[\033[00m\]'
1

除了设置前景颜色,Bash 还允许设置背景颜色。

  • \033[0;40m: 蓝色
  • \033[1;44m: 黑色
  • \033[0;41m: 红色
  • \033[1;45m: 粉红
  • \033[0;42m: 绿色
  • \033[1;46m: 青色
  • \033[0;43m: 棕色
  • \033[1;47m: 浅灰色

下面是一个带有红色背景的提示符。

PS1='\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] '
1

# 环境变量 PS2,PS3,PS4

除了 PS1,Bash 还提供了提示符相关的另外三个环境变量。

环境变量 PS2 是命令行折行输入时系统的提示符,默认为 >

$ echo "hello
> world"
1
2

上面命令中,输入 hello 以后按下回车键,系统会提示继续输入。这时,第二行显示的提示符就是 PS2 定义的 >

环境变量 PS3 是使用 select 命令时,系统输入菜单的提示符。

环境变量 PS4 默认为 +。它是使用 Bash 的 -x 参数执行脚本时,每一行命令在执行前都会先打印出来,并且在行首出现的那个提示符。

比如下面是脚本 test.sh

#!/bin/bash

echo "hello world"
1
2
3

使用-x参数执行这个脚本。

$ bash -x test.sh
+ echo 'hello world'
hello world
1
2
3

上面例子中,输出的第一行前面有一个 +,这就是变量 PS4 定义的。