如何让终端标题保留在 Mac 上

如何让终端标题保留在 Mac 上

我不确定这是否是我的 Mac 的问题(我对它很陌生),或者这是我正在 ssh 进入的服务器的设置。

我正在做的事情是这样的:

  1. 在终端中打开一个新窗口
  2. 通过 SSH 进入 CentOS 服务器。我的登录 shell 是 bash。
  3. 点击 Shell->编辑标题
  4. 将标题和选项卡标题更改为 abc123。它在终端标题栏中反映为 abc123-abc123-ssh-100x24
  5. 在终端中,运行“sudo su”将用户更改为 root。请注意,标题现在已更改为 root@blah:/home/myuser-ssh-100x24。如果我退出 root,标题名称仍然是这个新名称。

如何让标题名称保持为 abc123,并在切换到其他用户时不改变?提前感谢您的帮助。

答案1

标题是从您连接的服务器设置的。很有可能,/etc/bashrc或者有一个类似的文件定义PROMPT_COMMAND来设置标题。在 CentOS 6 上,它看起来像这样:

  if [ -z "$PROMPT_COMMAND" ]; then
    case $TERM in
    xterm*)
        if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
        else
            PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
        fi
        ;;
[... more of the same ...]
      esac
  fi

为了防止这种情况,请确保在您通过 SSH 进入的服务器(例如)上设置 的和您自己的 bash 配置PROMPT_COMMAND=文件。root~/.bashrc

或者,添加PROMPT_COMMAND/etc/sudoersenv_keep)和/etc/ssh/sshd_configAcceptEnv)以从本地系统继承它,并将其设置为不影响标题栏的值。

在这种特定情况下,您还可以将终端设置为不同的终端,因为这仅适用xterm*于 CentOS(终端 » 首选项… » 设置 » (选择配置文件) » 高级 » 将终端声明为)。


Terminal.app 似乎不允许锁定标题——您可能需要更改设置它的配置,如上所述。您可以随时查看其他终端,例如 iTerm。它支持保持配置文件名称标题也发生了变化。


这里有一个肮脏的黑客技术,可以在不改变你通过 SSH 进入的所有服务器的配置的情况下保留你的终端标题:

在您通过 SSH 进入 Linux 机器的同一个 shell 中,在执行此操作之前,请运行以下命令:

while true ; do printf "\033]0;%s\007" "My Terminal Title" ; sleep 1 ; done &

这将在后台执行一个循环,将终端标题更改为我的终端标题每秒一次,覆盖在 SSH 会话中执行的任何更改。

一旦完成后,使用 shell 中的作业控制来停止它(jobs如果kill %1它是第一份作业),或fg将其带到前台,然后使用 取消Ctrl-C

相关内容