您可能知道,默认情况下,AWS 实例的主机名类似于ip-12-34-56-78.us-west-2.compute.internal
,因此当我 ssh 到该主机时,选项卡名称会更改为root@ip-12-34-56-78
(对我来说有点难以识别哪个是哪个)。
因为我有以下内容~/.ssh/config
:
Host mail.domain.com
Hostname 1.2.3.4
User root
Host web.domain.com
Hostname 5.6.7.8
User root
我想知道是否有任何方法可以将选项卡名称更改为我连接到的远程主机的“别名”主机名(而不是“真实”主机名):
我当前的PS1
设置:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
我尝试将 ssh 包装器添加到~/.bashrc
:
ssh() {
echo -ne "\033]0;${@: -1}\007"
exec ssh $@
}
然后. ~/.bashrc
通过运行进行测试ssh web.domain.com
:
- 尽管连接:选项卡名称更改为
web.domain.com
,如预期 - 什么时候连接的: 它被覆盖
root@ip-5-6-7-8
为什么?有什么与PS1
这里相关的吗?
更新 6 月 6 日星期五 21:58:04 ICT 2014
发生了一些非常奇怪的事情:看起来这只发生在 AWS 实例上。对于其他主机,登录后选项卡名称仍然保留。
PS1
在AWS实例上:
# echo $PS1
[\u@\h \W]\$
PS1
在其他主机上:
~ echo $PS1
\[\]\[\][\[\]\t\[\]] \u\[\]@\[\]\h\[\]\[\]:\[\]\w\[\] \[\]
我还尝试将PS1
AWS 上的变量设置为工作主机的值,但没有帮助。
答案1
这应该是因为登录到远程 shell 会话后,该服务器的 PS1 会向您发送回相同的\033]0;title\007
命令序列,这会使您的终端程序拦截并相应地显示。在本地工作站上编辑 PS1 确实没有任何效果。
我有类似的要求,我所做的是在远程 shell 的 bashrc 上,我输入了类似以下内容
PS1="\033]0;(tools)\007\015[\u@\h \W]# "
这些工具是我想用来识别标题的指定名称。实际上,标题在终端中正确显示了它,并且命令提示符是我通常使用的。