SSH 中的 SSH 在 xterm 标题栏中显示错误的机器名称

SSH 中的 SSH 在 xterm 标题栏中显示错误的机器名称

我正在开发一个同时连接到多个服务器的分布式系统。我正在处理的程序中没有手动启动任何内容,但这是手动重新创建错误的方法。

我启动 xterm,然后通过 SSH 连接到机器,如下所示:

ssh machine_1

在那里我在第一个 xterm 中启动另一个 xterm,如下所示:

xterm &

然后新的 xterm 窗口的标题栏类似于“用户名(在 machine_1 上)”

在这个 xterm 中,我通过 SSH 连接到另一台机器,如下所示:

ssh machine_2

但标题栏仍然是这样的:“用户名(在 machine_1 上)”

即使我已登录到 machine_2。我希望它显示“用户名(在 machine_2 上)”。完全删除括号也可以。

我尝试了 xtermset 但这不会影响括号。

答案1

xterm 或 machine_1 上的 shell 配置为设置终端标题以包含计算机名称。在 machine_2 上配置 shell,将终端标题设置为包含计算机名称。您还需要确保 machine_1 上的 shell 在 ssh 会话终止时重置标题。通常的方法是让 shell 在显示提示时重置终端标题。如果全屏文本模式应用程序在运行时设置终端标题,则这还有一个额外的好处,即可以将终端标题重置为合理的内容。

您可以通过显示来设置 xterm 的标题转义序列 \e]2;my title here\a其中\e是转义字符 ( \033),\a是响铃字符 ( \007)。将此序列包含在您的 shell 提示符中。为了巴什,在您的 中添加这样一行~/.bashrc

PS1="\[\033]2;xterm on $HOSTNAME\a\]$PS1";;

反斜杠括号标点符号\[…\]告诉 bash 里面的内容宽度为 0(如果省略括号,显示将出现乱码)。

如果您设置了该选项,则可以在提示字符串中包含变量和命令替换,以获得在每个命令之后更改的更多奇特标题promptvars

在 zsh 中,设置标题precmd功能,在每个提示之前执行。

precmd () {
  print -n "\e]2;xterm on $HOSTNAME in $PWD\a"
}

当您执行此操作时,您可以设置标题以preexec包含正在运行的命令的名称。这是一种简单的方法,它对命令中不可打印的字符反应不佳:

preexec () {
  print -nr $'\e]2;'"xterm on $HOSTNAME running $2"$'\a'
}

相关内容