任何在 Linux 中启动终端的人都熟悉默认的 Bash 提示符
[user@$host ~]$
但是你知道吗,这是完全可定制的,并且可以包含一些非常有用的信息?这里有一些隐藏的宝藏,你可以用来定制你的 Bash 提示符。
Bash 提示符是如何设置的?
Bash 提示符由环境变量 PS1 (提示字符串 1)设置,它用于交互式 shell 提示符。还有一个 PS2 变量,当需要更多输入来完成 Bash 命令时使用。
[dneary@dhcp-41-137 ~]$ export PS1="[Linux Rulez]$ "
[Linux Rulez] export PS2="... "
[Linux Rulez] if true; then
... echo "Success!"
... fi
Success!
PS1 的值在哪里设置?
PS1 是一个常规环境变量。
系统默认值在 /etc/bashrc 中设置。在我的系统中,默认提示符用这一行设置
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
这测试 PS1 的值是否为 \s-\v$(系统默认值),如果是,则将 PS1 设置为值 [\u@\h \W]\\$。
但是,如果你想要看到自定义提示符,你不应该编辑 /etc/bashrc。你应该将其添加到你的 Home 目录中的 .bashrc 中。
\u、\h、\W、\s 和 \v 是什么意思?
在 man bash 的 PROMPTING 部分,你可以找到 PS1 和 PS2 中所有特殊字符的描述。以下是默认选项
- \u:用户名
- \h:短主机名
- \W:当前工作目录的基本名称(home 目录为 ~,其他地方为当前目录的结尾)
- \s:Shell 名称(bash 或 sh,取决于 shell 的调用方式)
- \v:shell 的版本
我可以在提示符中使用哪些其他特殊字符串?
有许多特殊的字符串可能很有用。
- \d:扩展为 "Tue Jun 27" 格式的日期
- \D{fmt}:允许自定义日期格式——有关可用选项,请参阅 man strftime
- \D{%c}:以当前语言环境给出日期和时间
- \n:包含新行(请参阅下面的多行提示符)
- \w:当前工作目录的完整路径
- \H:当前机器的完整主机名
- \!:历史记录编号——你可以使用 shell 历史记录事件指示符 ! 后跟您感兴趣的特定命令的编号来运行任何以前的命令。(使用 Linux 历史记录是另一个教程...)
还有许多其他特殊字符——你可以在 Bash 手册页的 PROMPTING 部分看到完整列表。
多行提示符
如果你使用较长的提示符(例如,如果你包含 \H 或 \w 或完整的 date-time),你可能想要将内容分成两行。这是一个多行提示符的示例,日期、时间和当前工作目录在一行,用户名 @hostname 在第二行
PS1="\D{%c} \w\n[\u@\H]$ "
我还可以做其他有趣的事情吗?
人们偶尔会做的一件事是创建彩色提示符。虽然我发现它们很烦人和分散注意力,但你可能会喜欢它们。例如,要将上面的日期时间更改为以红色文本显示,目录以青色显示,用户名以黄色背景显示,你可以尝试这样做
PS1="\[\e[31m\]\D{%c}\[\e[0m\]
\[\e[36m\]\w\[\e[0m\]\n[\[\e[1;43m\]\u\[\e[0m\]@\H]$ "
要剖析这个
- \[..\] 声明一些非打印字符
- \e[.. 是一个转义字符。后面是一个特殊的转义序列,用于更改终端中的颜色(或其他特征)
- 31m 是红色文本(41m 将是红色背景)
- 36m 是青色文本
- 1;43m 声明黄色背景(1;33m 将是黄色文本)
- 结尾处的 \[\e[0m\] 将颜色重置为终端默认值
你可以在 Bash 提示符 HOWTO 中找到更多颜色和技巧。你甚至可以使文本反转或闪烁!我不知道为什么有人会想这样做。但是你可以!
你最喜欢的 Bash 提示符自定义项是什么?你见过哪些让你抓狂的?请在评论中告诉我。
8 条评论