如何自动将终端标题设置为没有路径的目录名

Sta*_*rog 12 command-line bash titlebar

目前,我的 bash 终端/选项卡标题是根据我所在的目录设置的。例如:

bob@bobscomputer:~/i/had/some/great/pie/yesterday
Run Code Online (Sandbox Code Playgroud)

如果我并排打开多个选项卡,这不是很有用。例如,如果我并排打开上述目录的 4 个选项卡,我所看到的只是

bob@bobscomputer:~/i/had...
Run Code Online (Sandbox Code Playgroud)

4次。

我希望我的所有终端标题都自动设置为路径的最后一部分。在上面的例子中,我希望标题是

yesterday
Run Code Online (Sandbox Code Playgroud)

显然,当我更改目录时,标题应该更改。我想在不更改提示的情况下执行此操作,因此提示和终端标题应该不同。

有没有办法做到这一点?

Ste*_*n K 13

为什么要在不修改 PS1 变量的情况下执行此操作?这是正确的做法。

如果你运行以下命令,你会得到你想要的:

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

这只是采用默认提示:

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

...并替换\u@\h: \w\W.

您可以使用任何回显正确转义码的命令执行相同的操作:

echo -en "\e]0;${PWD##*/}\a"

...但是你会不断地与 bash 作斗争以阻止它使用 PS1(最好的方法)。

  • 谢谢 - 我没有意识到 PS1 独立设置标题和提示。在我的 .bashrc 中,在 xterm*|rxvt* 中的 "$TERM" 情况下,我设置 PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\W\a\]$PS1" ,它正是我想要的。 (2认同)