我的机器(Kubuntu 13.10)上的默认 PS1 变量是这样的:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
我正在寻找有关 $PS1 变量如何工作的参考,至少可以让我理解上述 PS1 变量。
答案1
参考
到目前为止,还没有关于 Bash 提示符中可以包含的所有内容的单一参考 - 但由于这是一个经过数十年发展的功能,并且可能因发行版而异,所以这个要求可能太高了。我试图在这里总结一下我发现最有用的内容。
本指南是最完整的,但内容又长又杂乱。以下是一些比较有用的部分:
- 第 2.4 节和2.5解释设置 PS1 的基础知识,包括(可打印的)转义字符。
- 第 3.4 节解释为什么
\[
并且\]
是必要的。 - 第 6 部分解释您可能想要使用的所有主要(不可打印)转义序列,包括设置提示的颜色和 xterm 窗口的标题。
本指南解释${}
Bash 的一般工作原理,以及这个 Ask Ubuntu 问题进一步解释其如何与 一起工作debian_chroot
。
在这之间,我认为默认 Ubuntu PS1 变量中的每个字符都得到了解释。
Ubuntu 提示符的解释
提示分为三个部分:
\[\e]0;\u@\h: \w\a\]
设置 xterm 窗口的标题栏:\[
开始一段不可打印的字符\e]0;
是“set xterm title”的转义序列(我相信除 0 之外的数字将设置其他 xterm 属性,尽管我还没有测试过)\u@\h: \w
要使用的标题(请参阅下文的\u
、\h
和\w
)\a
标志着标题的结束\]
标记不可打印字符的结束
${debian_chroot:+($debian_chroot)}
如果设置了 $debian_chroot,则扩展为括号中的 $debian_chroot 的值。请参阅这个问题有关 $debian_chroot 的更多信息。\u@\h:\w\$
是提示本身:\u
扩展到当前用户名\h
扩展为当前主机名\w
扩展到当前工作目录\$
#
针对 root 和$
所有其他用户扩展为
答案2
答案3
ss64.com似乎是我找到的最好的参考。
它解释了以下变量:
\d The date, in "Weekday Month Date" format (e.g., "Tue May 26").
\h The hostname, up to the first . (e.g. deckard)
\H The hostname. (e.g. deckard.SS64.com)
\j The number of jobs currently managed by the shell.
\l The basename of the shell's terminal device name.
\s The name of the shell, the basename of $0 (the portion following
the final slash).
\t The time, in 24-hour HH:MM:SS format.
\T The time, in 12-hour HH:MM:SS format.
\@ The time, in 12-hour am/pm format.
\u The username of the current user.
\v The version of Bash (e.g., 2.00)
\V The release of Bash, version + patchlevel (e.g., 2.00.0)
\w The current working directory.
\W The basename of $PWD.
\! The history number of this command.
\# The command number of this command.
\$ If you are not root, inserts a "$"; if you are root, you get a "#" (root uid = 0)
\nnn The character whose ASCII code is the octal value nnn.
\n A newline.
\r A carriage return.
\e An escape character.
\a A bell character.
\\ A backslash.
\[ Begin a sequence of non-printing characters. (like color escape sequences). This
allows bash to calculate word wrapping correctly.
\] End a sequence of non-printing characters.
定义\[ ... \]
一系列非打印字符。它们需要正确跟踪光标位置。
\e
提示符中的 启动转义序列。有关这些的更多信息这里(请注意该页面上的“Esc”是\e
序列)。
- 注意:我其实并不喜欢转义序列。使用
tput
来获取转义代码。
${debian_chroot:+($debian_chroot)}
是参数扩展。请参见这里
($debian_chroot)
如果$debian_chroot
设置了则写入,否则不写入任何内容。