![修复 SSH 远程登录到另一台机器后的终端标题](https://linux22.com/image/23444/%E4%BF%AE%E5%A4%8D%20SSH%20%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95%E5%88%B0%E5%8F%A6%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8%E5%90%8E%E7%9A%84%E7%BB%88%E7%AB%AF%E6%A0%87%E9%A2%98.png)
现在我正在使用一行 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 会话之后。简而言之:它不是那样工作的。基本上你有三个选择:
围绕 ssh 编写一个包装器,即一个名为的可执行 shell 脚本,
ssh
该脚本优先于您的 $PATH,其中包含中间某处的/usr/bin/ssh
行。exec /usr/bin/ssh $@
这使您能够让 shell 在有效的 ssh 二进制文件运行之前和之后执行一些操作,同时将开销保持在最低限度。针对您选择的 SSH 源编写补丁,为您提供一个清理钩子,该钩子执行通过命令行或某些配置设置传递的 shell 命令。这就是我们想要的。
评估
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
}