![如何让 gnome-terminal 在 ssh 之后恢复其标题?](https://linux22.com/image/1253822/%E5%A6%82%E4%BD%95%E8%AE%A9%20gnome-terminal%20%E5%9C%A8%20ssh%20%E4%B9%8B%E5%90%8E%E6%81%A2%E5%A4%8D%E5%85%B6%E6%A0%87%E9%A2%98%EF%BC%9F.png)
我正在运行 gnome-terminal,并设置为根据终端命令更新其自己的标题来更新其标题(Fedora 13 上的默认设置)。当我通过 SSH 连接到其他地方时,标题会正确更新,但随后 SSH 退出,gnome-terminal 指示我仍在远程登录。这在尝试导航时令人困惑。如何在登录时保持行为,并在注销时恢复旧标题(默认情况下只是“终端”,但最好显示当前位置)?
答案1
将 set-title 转义序列添加到 shell 的 rc 文件中。对于bash
v4,这将是:
if [[ $TERM == xterm* ]]; then
# This puts "user@host workdir" into the titlebar.
# (look for section "PROMPTING" in bash's manual)
title='\u@\h \w'
PS1+="\[\e]0;$title\007\]"
fi
在你的~/.bashrc
。
除非您喜欢摆弄bash
脚本,否则请不要再往下读了。
上面的代码实际上是我的~/.bashrc
代码片段的一个大大简化的版本:
case $TERM in
[xkE]term*|rxvt*|cygwin)
title_seq='\e]0;%s\007';;
screen*)
# only set the "screen"window title
title_seq='\ek%s\e\\';;
esac
# Very useful for: title syslog && tailf /var/log/syslog
title() { [ "$title_seq" ] && printf "$title_seq" "$*"; }
# Modify the prompt string.
if [ "$title_seq" ]; then
title='\u@\h \w'
PS1+="\[$(printf "${title_seq//\\/\\\\}" "$title")\]"
fi
事实上,那是我的老的 ~/.bashrc
片段。我发现PROMPT_DIRTRIM=1
必须将$PS1
修改(最后一条if
语句)替换为:
update_title() {
title "$USER@$HOSTNAME ${PWD/#$HOME/~}"
}
PROMPT_COMMAND="update_title"