如何防止在ssh之后终端标题更改

我使用众多解决方案之一来设置终端标题: .bashrc中的函数:
function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="\[\e]2;$*\a\]"
  PS1=${ORIG}${TITLE}
}

而且它运行得非常完美!但是当我通过ssh连接到远程主机时,标题会变成ubuntu@remote.host.name

有没有办法防止ssh连接后标题的改变呢?


1你可能也需要将这个放在你的远程机器的.bashrc文件中。@i.bondarenko - Pie
1很遗憾,我无法修改远程机器的.bashrc文件。其中一些是在生产环境中使用的,所以对它们的修改受到限制。其他的是测试服务器,它们的运行时间非常短,所以我每天需要多次修改.bashrc文件。不过,还是要感谢@Pie提出的建议。 - i.bondarenko
1我尝试将"ssh + set_title_command"组合起来,并将其包装成别名,但没有成功。 - i.bondarenko
如何合并?我会使用 alias myssh="ssh服务器名称;设置标题" - waltinator
@waltinator 谢谢你的建议。 我尝试过: alias myssh="ssh ubuntu@host;set-title my_title1" 但没有成功。 - i.bondarenko
别名不起作用,因为它们仍然在客户端上运行,而不是远程机器上运行。而且 set-title 只会在 ssh 结束后被调用,也就是当你断开与远程主机的连接时。 - MestreLion
试试这个链接:https://askubuntu.com/questions/1470061/change-title-for-tabs-in-terminator/1473378#1473378 - tquang
1个回答

如果您无法修改`~/.bashrc`,我假设您也无法在远程用户的`~`目录下创建或复制任何文件,对吗?因为如果可以的话,只需添加一个`~/.bash_aliases`文件,将标题恢复为默认值:`echo -ne '\e]2;\a'`。
所以...您最好的选择是通过设置一个与`xterm*|rxvt*`不同的`TERM`来欺骗远程的`~/.bashrc`,例如:
$ TERM=gnome-256color ssh ubuntu@remote.host.name

(在我看来,这是一个相当愚蠢的限制/政策。~/.bashrc 是一个只在交互式会话中运行的文件,因此不会影响任何脚本或服务。而且默认情况下,在Ubuntu和其他发行版中提供的 .bashrc 文件具有设置标题的愚蠢行为,开发人员/系统管理员在设置服务器时应该修复它)