今天,我在工作中我遇到一个问题,需要修改 Bash 的默认提示行。
于是在网上稍微收集了一些资料,那么接下来,就让我们仔细了解一下如何自定义 bash 提示符
一、PS1: Bash 的首行提示
首先,我们来看一下默认的提示符:
pilot@raspberrypi:~ $
其实,提示符是由一个名为 PS1 的环境变量定义的:
pilot@raspberrypi:~ $
| | |
| | 当前目录(完整路径)
| 主机名
用户名
PS1='\u@\h:\w \$'
1.1 提示符变量
以下是一些特殊符号:
- \u:用户名
- \h:主机名
- \w:当前工作目录(完整路径)
- \W:当前工作目录(仅文件夹名)
- \$:用户显示 ‘$’,root 显示 ‘#’
虽然这个默认提示符看起来还行,但在当我拥有多个机器时,它无法指示我到底在哪个机器上。
于是我们可以添加机器编号到提示符中,如下所示:
p1|pilot@raspberrypi:~ $
| | |
| | 主机名
| 用户名
测试平台
TEST_PLATFORM='p1'
PS1='$TEST_PLATFORM|\u@\h:\w \$'
1.2 提示符样式
为了提升测试人员和开发者的体验,我们来继续优化这个提示符,添加一些样式来区分不同信息。
1.2.1 颜色代码
\e[0;30m:黑色\e[0;31m:红色\e[0;32m:绿色\e[0;33m:黄色\e[0;34m:蓝色\e[0;35m:紫色\e[0;36m:青色\e[0;37m:白色\e[0m:重置所有样式
p1|pilot@raspberrypi:~ $
| | |
| | 主机名(蓝色)
| 用户名(绿色)
测试平台(黄色)
TEST_PLATFORM='p1'
PS1='\e[0;33m$TEST_PLATFORM\e[0m|\e[0;32m\u\e[0;30m@\e[0;34m\h\e[0;30m:\w \$'
1.2.2 字体粗细
除了颜色,我们还可以定义字体的粗细:
- 红色:
\e[0;32m - 粗体红色:
\e[1;32m
1.2.3 超链接
我们还可以在提示符中打印超链接:
# 超链接开始:\e]8;;
# 超链接结束:\e]8\\
# 结束链接:\e]8;;\e\\
# 示例超链接
echo -e "\e]8;;http://example.com\e\\点击这里\e]8;;\e\\"
1.3 更深入了解:ANSI 转义码(ESC)
在自定义提示符后,我对 \033[0;30m 代码产生了好奇。其实,这些以 \033 开头的编码被称为 ANSI 转义码。
颜色和样式只是 ANSI 转义码的一小部分功能。它们能够让用户完全控制终端中的一切,包括光标控制和擦除功能等。
若想要了解更多,可以看看 fnky 的 ANSI Gist。
二、关于 PS1:为什么叫 PS1?
PS1 是 Primary Prompt String 的缩写,表示默认交互提示符,终端默认打印的那一行。
其他提示符字符串包括:
- PS2:续行提示符,当我们换行时,终端在开头打印的那个符号,默认是
> - PS3:在 shell 脚本中用于“select”的提示符,当出现脚本选择时,最下面提问的字符,默认是:
#? - PS4:当我们在脚本开头配置
set -x时,会打印所有执行的代码行,其前缀由PS4来定义,默认是:+
这里有一些更详细的资料:
三、总结
通过自定义 Bash 提示符,我们可以提高使用体验,使其更具信息性和可读性。
希望本文能够有所帮助,感谢您的阅读!

425

被折叠的 条评论
为什么被折叠?



