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

nye*_*e17 23 ssh window-manager terminal window-title

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

print("\e]0;@ARGV\7");
Run Code Online (Sandbox Code Playgroud)

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

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

编辑

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

phy*_*att 9

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

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
}
Run Code Online (Sandbox Code Playgroud)

注意:编辑到 ~/.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()
Run Code Online (Sandbox Code Playgroud)

希望有帮助。

  • 说“恢复”有点不准确,因为您没有检查之前的情况...如果您查询并保存了先前的值;-) (2认同)

Ban*_*uin 6

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

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

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

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

  • @nye17 您可以发布您使用的解决方案脚本吗? (4认同)