如何让 OS X 从 ssh 回来时将终端标题设置回原始标题?

如何让 OS X 从 ssh 回来时将终端标题设置回原始标题?

从 OS X 开始,我通过 ssh 进入 foo(一个 Linux 机器)。我的终端标题变为 foo。然后我通过 ssh 进入 bar(另一个 Linux 机器)。我的终端标题变为 bar。我退出 bar。我的终端标题变为 foo。我退出 foo。我的终端标题仍然是 foo(而不是变回原来的标题)。问题显然不在于终端,因为从 Linux 机器注销回到 Linux 机器时它可以正常工作。可能不是 ssh,因为我使用 vim 时也有同样的问题。在我看来,问题出在 shell 上。我使用的是 BASH。查看环境,我没有发现 Linux 机器和我的 OS X 机器之间有什么太大的区别。两者都使用 xterm 的 TERM。

答案1

添加

export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'

解决了我的.bash_profile问题。

PROMPT_COMMAND每次显示提示时,似乎都会执行字符串 in 。从手册页中可以看到:

PROMPT_COMMAND

如果设置,则在发出每个主提示之前,该值将作为命令执行。

答案2

我找到了更好的解决方案。OSX 使用以下系统范围的配置:

PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"

函数update_terminal_cmd在 中声明/etc/bashrc_Apple_Terminal。因此,如果您不想通过重置 来破坏终端设置,则可以将这些行添加到或PROMPT_COMMAND的末尾:~/.profile~/.bashrc

my_update_terminal_cwd() {
    update_terminal_cwd # call system wide function
    printf '\e]0;\a'    # reset additional title after SSH session
}

PROMPT_COMMAND="my_update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"

例子:

SSH 会话之前

SSH 会话正在进行中 - 标题设置为远程主机名

SSH 会话后 - 标题已修复

相关内容