# 命令提示符 用户进入 Bash 以后,Bash 会显示一个命令提示符,用来提示用户在该位置后面输入命令。 ## 环境变量 PS1 命令提示符通常是美元符号`$`,对于根用户则是井号`#`。这个符号是环境变量`PS1`决定的,执行下面的命令,可以看到当前命令提示符的定义。 ```bash $ echo $PS1 ``` Bash 允许用户自定义命令提示符,只要改写这个变量即可。改写后的`PS1`,可以放在用户的 Bash 配置文件`.bashrc`里面,以后新建 Bash 对话时,新的提示符就会生效。要在当前窗口看到修改后的提示符,可以执行下面的命令。 ```bash $ source ~/.bashrc ``` 命令提示符的定义,可以包含特殊的转义字符,表示特定内容。 - `\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 ~]$`(具体的显示内容取决于你的系统)。 ```bash [user@host ~]$ echo $PS1 [\u@\h \W]\$ ``` 改写`PS1`变量,就可以改变这个命令提示符。 ```bash $ PS1="\A \h \$ " 17:33 host $ ``` 注意,`$`后面最好跟一个空格,这样的话,用户的输入与提示符就不会连在一起。 ## 颜色 默认情况下,命令提示符是显示终端预定义的颜色。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`设成下面的代码。 ```bash PS1='\[\033[0;31m\]<\u@\h \W>\$' ``` 但是,上面这样设置以后,用户在提示符后面输入的文本也是红色的。为了解决这个问题, 可以在结尾添加另一个特殊代码`\[\033[00m\]`,表示将其后的文本恢复到默认颜色。 ```bash PS1='\[\033[0;31m\]<\u@\h \W>\$\[\033[00m\]' ``` 除了设置前景颜色,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`:浅灰色 下面是一个带有红色背景的提示符。 ```bash PS1='\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] ' ``` ## 环境变量 PS2,PS3,PS4 除了`PS1`,Bash 还提供了提示符相关的另外三个环境变量。 环境变量`PS2`是命令行折行输入时系统的提示符,默认为`> `。 ```bash $ echo "hello > world" ``` 上面命令中,输入`hello`以后按下回车键,系统会提示继续输入。这时,第二行显示的提示符就是`PS2`定义的`> `。 环境变量`PS3`是使用`select`命令时,系统输入菜单的提示符。 环境变量`PS4`默认为`+ `。它是使用 Bash 的`-x`参数执行脚本时,每一行命令在执行前都会先打印出来,并且在行首出现的那个提示符。 比如下面是脚本`test.sh`。 ```bash #!/bin/bash echo "hello world" ``` 使用`-x`参数执行这个脚本。 ```bash $ bash -x test.sh + echo 'hello world' hello world ``` 上面例子中,输出的第一行前面有一个`+ `,这就是变量`PS4`定义的。