![Ubuntu VM 上的 $PS1 与实际提示符不匹配](https://linux22.com/image/49355/Ubuntu%20VM%20%E4%B8%8A%E7%9A%84%20%24PS1%20%E4%B8%8E%E5%AE%9E%E9%99%85%E6%8F%90%E7%A4%BA%E7%AC%A6%E4%B8%8D%E5%8C%B9%E9%85%8D.png)
我正在运行 Ubuntu Virtual Box
VM Vagrant
:
vagrant@lucid64:~$ uname -a
Linux lucid64 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux
我的 $PS1 变量实际上与提示不匹配,而且要复杂得多:
vagrant@lucid64:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
我正在寻找 $PS1 和我的提示符之间关系的解释,如$USER@$HOST:$PWD\$
上面所示。
例如,在我的普通笔记本电脑上,它托管着这个虚拟机并且是一台 Mac,它干净简单,如下所示:
~@12:10:20>echo $PS1
\w@\t>
答案1
Ubuntu 中默认$PS1
由三部分组成:
\[\e]0;\u@\h: \w\a\]
这是一个转义序列,它将把终端标题文本设置为
$USER@$HOST: $PWD
。\[
并\]
指示非打印字符序列的开始和结束。\e
是 ASCII 转义字符。]0;
是特定的转义序列设置终端图标和标题在xterm
兼容终端中\u
扩展为当前用户的用户名。@
是一个字面的@。\h
扩展为主机名。:
是一个字面上的冒号字符。\w
扩展到当前工作目录。\a
是一个 ASCII 响铃字符。${debian_chroot:+($debian_chroot)}
如果您处于 chroot 环境中,这将扩展为括号中的 chroot 名称。
${var:+OTHER}
$OTHER
如果已设置,则求值为var
,否则为空字符串。是一个初始化到文件内容$debian_chroot
中的变量。因此,如果您的 chroot 环境包含此文件,则提示符将包含该文件的内容,以指示 shell 当前在哪个 chroot 中运行。/etc/bash.bashrc
/etc/debian_chroot
\u@\h:\w\$
这是您通常看到的实际提示。
\u
、@
、\h
、:
、\w
如上。\$
如果有效 uid 为零(即用户是 root),则扩展为数字符号 #,否则扩展为美元符号 $。
资源
答案2
打破这个可能是最简单的!
在第一部分中:
\[\e]0;\u@\h: \w\a\]
第一部分(位\[\e]0;
)包含终端控制字符(通常用于 bash 提示符中的颜色和更新窗口标题等 - 我将在下面进一步解释。)
第二部分(\u@\h:
)将为您提供user@host
提示部分,而 则将\w
回显当前工作目录的路径。这\a
是一个ASCII 响铃字符。
快速搜索透露,本质上, $PS1 的那部分是告诉bash
将终端窗口的标题更新为与提示符相同的值像这样。 (我知道图中的 shell 是zsh
,但同样的原理也适用。)本质上,整个第一个“短语”是更新当前窗口标题。
${debian_chroot:+($debian_chroot)}
上面的部分只是意味着“如果定义了变量$debian_chroot
(即不为空),则在提示中包含该字符串”。我相当确定该变量$debian_chroot
仅在系统被 chroot 时才带有值。更多信息请点击此处。
\u@\h:\w\$
最后一部分创建标准user@host: ~/$
提示。
华泰
编辑:哎呀,好像有人抢先了我。