.bashrc 是否正确设置了图形终端标题?

.bashrc 是否正确设置了图形终端标题?

从默认值来看.bashrc是这样的:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac 

通过发出 echo 命令来检查结果:

$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

似乎${debian_chroot:+($debian_chroot)}将对命令行提示符执行条件插入,但不会对终端标题执行条件插入。似乎作者.bashrc打算将其显示在左侧的两个地方user@host,但实际上它并没有出现在两个地方。的评估debian_chroot发生在定义 PS1 时,但当时并不打算进行评估,而是打算在提示时进行评估。问题的根源在于,在构建字符串时,""引用会进行评估,而''引用不会。评估很早,因为括在中的整个内容\[ \]都是针对标题的。解释正确吗?

答案1

我想说整件事都不重要。debian_chroot安顿好了/etc/bash.bashrc。可以肯定的是,在正常情况下,如果设置了变量,则启动了新的 shell -/etc/bash.bashrc否则为什么要获取源代码?在这种情况下,~/.bashrc也会获取源代码。因此,要么在您显示的行中设置和修改变量时设置变量PS1,要么不设置,并且不会设置。效果是一样的。

我只能猜测为什么最初的开发人员在设置时使用单引号PS1。 大概开发人员已经学会了谨慎,""只在必要时使用,也就是在修改时PS1

请注意,:+如果变量未设置,则意味着不执行任何操作。

答案2

${debian_chroot:+($debian_chroot)}插入取决于$debian_chroot变量或/etc/debian_chroot文件的存在。

这是一个简单的例子。在下面的屏幕截图中,我通过 ssh 连接到装有 Ubuntu Snappy 的 Raspberry Pi,它设置了$debian_chroot变量(默认情况下),而我的笔记本电脑的 Ubuntu 没有。您可以在选项卡中看到生成的提示,在这两种情况下,变量$TERM都是xterm

在此处输入图片描述

现在,如果变量$TERM是其他东西,它不会改变 GUI 终端标题。screen例如,这可能是连接到一个会话,其中变量$TERMscreen

相关内容