如何在 Ubuntu 16 中更改 gnome 终端中的 bash 提示符而不弄乱终端标题?

如何在 Ubuntu 16 中更改 gnome 终端中的 bash 提示符而不弄乱终端标题?

我不喜欢所有长目录路径都占用我的终端空间,因此我通过 python 脚本截断它们。我编辑了 .bashrc 文件并将 PS1 替换为

export PROMPT_COMMAND='PS1="$(python /home/vinay/bash_promt.py)"'.

当我这样做时,终端的标题不再起作用。它只是显示Terminal这很烦人。我可以通过运行以下命令手动更改标题:

PROMPT_COMMAND='echo -ne "\033]0;CUSTOM TITLE\007"'

有没有办法将终端的标题设置为我的 bash 中设置的自定义提示。

答案1

对于 gnome-terminal,终端标题是通过PROMPT_COMMAND中定义的来设置的/etc/profile.d/vte-2.91.sh

PROMPT_COMMAND正如此脚本中所定义的,它做了两件事:

  • 使用 OSC 0 转义序列 ( \033]0;NEW_TITLE\007) 更改终端标题,

  • \033]7;NEW_CURRENT_DIRECTORY\007使用 OSC 7 转义序列 ( ,这被分解为函数)更改终端的当前目录概念__vte_osc7

如果您从中删除第二个PROMPT_COMMAND,则新打开的终端窗口或选项卡将不会在您之前终端所在的目录中打开。您很可能不希望出现这种情况。

因此,在您的 shell 启动脚本中,在获取源之后,vte-2.91.sh您必须构建您的首选PROMPT_COMMAND,以类似于的方式设置标题vte-2.91.sh,并将当前工作目录设置为默认目录。

我不知道有什么方法可以在内部或其他任何地方引用 的PS1解析值(即替换用户名等之后) (更不用说过滤掉颜色变化等转义序列了)。如果您希望在提示符和窗口标题中看到相同的字符串,我相信您需要为和PROMPT_COMMAND重复该字符串的构造。PS1PROMPT_COMMAND

答案2

这对你有用

打开 ~/.bashrc。找到以下行:

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

#通过在它前面添加一个字符来注释掉此行:

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

现在添加此行(您可能希望将其放在注释掉的行之后):

PROMPT_COMMAND='echo -ne "\033]0;Custom Name\007"'

代替Custom Name无论您想将终端标题更改为什么。

希望这可以帮助。

答案3

要使用的转义序列是ESC]2;新标题BEL在哪里ESC键比利时是转义符和响铃符。例如\[\e]2;NEWTITLE\a\]。使用 #Bash 转义序列,更改提示符中的标题如下:

export PS1='\[\e]2;new title\a\]prompt > ' 文档参考

因此,具有自定义终端标题的多色截断 bash 提示符的示例是:

export PS1='\[\e]2;$PWD\a\]\e[93m$USER\e[97m@\e[90m$HOSTNAME \e[93m$ \e[0m'

在该示例中,终端标题将始终反映当前工作目录($PWD),并且无论您位于哪个目录中,终端提示符都将始终如下所示:user@hostname $

您可以替换$PWDCUSTOM TITLE使终端标题始终反映CUSTOM TITLE

更新
\[小心不要在和 中包装非打印字符\]。没有它也可以工作,而且我已经这样做了很多年。然而,正如我今天在一些设置中发现的那样,它可能会导致一些问题在终端中。下面是使用变量并包装颜色代码的更简洁的版本:

T_YELLOW='\[\e[93m\]'
T_WHITE='\[\e[97m\]'
T_GRAY='\[\e[90m\]'
T_DEFAULT='\[\e[0m\]'
T_TITLE='\[\e]2;$PWD\a\]'
export PS1="${T_TITLE}${T_YELLOW}$USER${T_WHITE}@${T_GRAY}$HOSTNAME${T_YELLOW} $ ${T_DEFAULT}"

相关内容