PS1 提示符在本地和远程控制台上显示不同

PS1 提示符在本地和远程控制台上显示不同

这是我的 PS1 提示:

export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "

这表明远程完美(SSH) 控制台 (PTS):

luis@Chomsky:~$

无法显示,但完整提示是紫色的。
问题是:在本地(TTY),它显示出一些丑陋:

;luis@Chomsky: ~luis@Chomsky:~$

也无法显示,但第一部分(从“;”到“~”)没有颜色,其余部分是紫色的。

Additional data:  
  • 使用 Bash 外壳:

luis@Chomsky:~$ ps -p$$ -ocmd= -bash

  • 在 Ubuntu Desktop 和 Ubuntu Server v14.04 LTS 中进行了测试。
  • (至少)在便携式 ASUS EEE PC 和 VirtualBox 虚拟机上进行了测试。
  • 我用来export PS1=在 处添加行~/.bashrc

我想知道为什么会发生这种情况以及我该怎么办解决这个问题

谢谢。

答案1

控制序列\e]0;TITLE\a被许多终端仿真器识别;它设置窗口标题。 Linux 控制台无法识别此控制序列(无论如何它都没有标题):它看到\e]0,决定“我不知道这意味着什么,所以我会忽略它”,并打印以下文本。

您需要根据当前终端以不同方式设置提示。

title_text='\u@\h: \w'
set_title=
case $TERM in
  dtterm|rxvt|[Ek]term|*xterm) set_title='\[\e]0;'"$title_text"'\a\]';;
  screen) set_title='\[\ek'"$title_text"'\e\\\]';;
esac
PS1="$set_title$PS1"

相关内容