我不确定这是否是我的 Mac 的问题(我对它很陌生),或者这是我正在 ssh 进入的服务器的设置。
我正在做的事情是这样的:
- 在终端中打开一个新窗口
- 通过 SSH 进入 CentOS 服务器。我的登录 shell 是 bash。
- 点击 Shell->编辑标题
- 将标题和选项卡标题更改为 abc123。它在终端标题栏中反映为 abc123-abc123-ssh-100x24
- 在终端中,运行“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/sudoers
(env_keep
)和/etc/ssh/sshd_config
(AcceptEnv
)以从本地系统继承它,并将其设置为不影响标题栏的值。
在这种特定情况下,您还可以将终端设置为不同的终端,因为这仅适用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
。