在终端标题中显示当前 TTY/PTY

6 bash prompt window-title

我试图通过自定义我的.bashrc文件来弄清楚如何使当前的 TTY 会话出现在当前的终端窗口标题栏中,但我似乎在让它工作时遇到了一些麻烦。

我试着这样做;

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h \w\a | $(tty | cut -d/ -f3,4)\]$PS1"
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时并没有给出预期的结果。相反,它是这样的;

| pts/0user@hostname ~$
Run Code Online (Sandbox Code Playgroud)

在打开终端屏幕而不是像这样的标题栏;

user@host ~ | pty/0
Run Code Online (Sandbox Code Playgroud)

在我的.bashrc文件中它看起来像这样

case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h \w\a | $(tty | cut -d/ -f3,4)\]$PS1"
    ;;
*)
    ;;
esac
Run Code Online (Sandbox Code Playgroud)
  • ——

用这个固定。

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h \w | $(tty | cut -d/ -f3,4)\a\]$PS1"
Run Code Online (Sandbox Code Playgroud)

感谢@Gilles 在他们的帖子中指出了这一点,这使得需要做的事情变得更加清楚。

Gil*_*il' 6

要设置窗口标题,请发出转义序列 ,其中和分别是转义字符和响铃字符。由于您是在 bash 提示符下执行此操作,因此转义序列必须在其中以告诉 bash 这不会在终端内产生任何输出。\e]2;TITLE\a\e\a\[…\]

您可以使用参数扩展来截断/dev/前缀,并tty一劳永逸地调用,因为它不会改变。

TTY=$(tty)
PS1="\\[\\e[2;${TTY#/dev/}\\a\\]$PS1"
Run Code Online (Sandbox Code Playgroud)