任何在 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: 当前工作目录的基本名称(家目录为 ~ ,其他地方为当前目录的结尾)
- \s: Shell 名称(bash 或 sh,取决于 shell 的调用方式)
- \v: Shell 的版本
我可以在提示符中使用哪些其他的特殊字符串?
有许多有用的特殊字符串。
- \d: 展开为 "Tue Jun 27" 格式的日期
- \D{fmt}: 允许自定义日期格式 - 有关可用选项,请参阅 man strftime
- \D{%c}: 以当前语言环境提供日期和时间
- \n: 包含一个新行(请参阅下面的多行提示)
- \w: 当前工作目录的完整路径
- \H: 当前机器的完整主机名
- \!: 历史记录编号 - 你可以使用 shell 历史记录事件指示符 ! 后跟你要查找的特定命令的编号来运行任何以前的命令。(使用 Linux 历史记录是另一个教程...)
还有许多其他的特殊字符 - 你可以在 Bash man page 的 PROMPTING 部分中看到完整列表。
多行提示
如果使用较长的提示符(例如,如果包含 \H 或 \w 或完整的 date-time),你可能希望将内容分成两行。 这是一个多行提示的示例,其中日期、时间和当前工作目录在一行,username @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 prompt HOWTO 中找到更多颜色和提示。 你甚至可以使文本反转或闪烁! 我不知道为什么会有人想这样做。 但是你可以!
你最喜欢的 Bash 提示符自定义设置是什么? 你见过哪些让你抓狂的设置? 请在评论中告诉我。
8 条评论