Ubuntu VM 上的 $PS1 与实际提示符不匹配

Ubuntu VM 上的 $PS1 与实际提示符不匹配

我正在运行 Ubuntu Virtual BoxVM 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: ~/$提示。

华泰

编辑:哎呀,好像有人抢先了我。

相关内容