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