修复 SSH 远程登录到另一台机器后的终端标题

修复 SSH 远程登录到另一台机器后的终端标题

现在我正在使用一行 Perl 代码来更改终端栏的标题,

print("\e]0;@ARGV\7");

但每次我 ssh 到另一台远程计算机后,标题都会被主机修改(我对此并不特别担心)。但退出连接后,修改后的标题仍然存在。有没有办法来解决这个问题?本质上,我希望在本地操作时为我的终端有一个固定的标题。

我主要在 CentOS 或 Debian 下使用 xfce 终端和终结器。谢谢。

编辑

另一个微妙之处是,与其让所有终端具有相同的名称,我更希望能够自由地即时编辑它们的标题,但仅禁止 SSH 会话修改我编辑的内容。

答案1

解决方案:添加一些函数~/.bashrc来做一些事情ssh 和 su 命令

function title()
{
   # change the title of the current window or tab
   echo -ne "\033]0;$*\007"
}

function ssh()
{
   /usr/bin/ssh "$@"
   # revert the window title after the ssh command
   title $USER@$HOST
}

function su()
{
   /bin/su "$@"
   # revert the window title after the su command
   title $USER@$HOST
}

注意:编辑 ~/.bashrc 后重新启动 bash

例子:

# title is "user1@boxA"
ssh boxB  # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()

希望有帮助。

答案2

我不知道窗口标题,但我一直试图让我的系统在终止 ssh 会话时执行某些操作 - 实际上,在终止 ssh 会话之后。简而言之:它不是那样工作的。基本上你有三个选择:

  1. 围绕 ssh 编写一个包装器,即一个名为的可执行 shell 脚本,ssh该脚本优先于您的 $PATH,其中包含中间某处的/usr/bin/ssh行。exec /usr/bin/ssh $@这使您能够让 shell 在有效的 ssh 二进制文件运行之前和之后执行一些操作,同时将开销保持在最低限度。

  2. 针对您选择的 SSH 源编写补丁,为您提供一个清理钩子,该钩子执行通过命令行或某些配置设置传递的 shell 命令。这就是我们想要的。

  3. 评估PROMPT_COMMAND的输出history。基本上是一种更通用、更丑陋的方法 1。

答案3

使用相同的机制配置本地 shell 点文件(例如,$PROMPT_COMMAND在 中)以适当地设置终端标题。~/.bashrc

例如:

export PROMPT_COMMAND="printf '\e]0;bash\7\n'"

答案4

当我退出 SSH 时,其他答案对我不起作用,但让我接近。当我退出远程 ssh 会话时,添加 setw 自动重命名会起作用,因此它会自动重命名,并且不必再退出窗口来重置。 [一月。 2018 - Debian 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}

相关内容