如何在 ssh 后让 gnome-terminal 恢复其标题?

Sam*_*man 2 gnome-terminal title-bar

我正在运行 gnome-terminal set 以根据更新自己标题的终端命令更新其标题(Fedora 13 上的默认设置)。当我通过 SSH 连接到其他地方时,标题已正确更新,但随后 SSH 退出并且 gnome-terminal 指示我仍在远程登录。这在尝试导航时令人困惑。如何在登录时保持行为,并在注销时恢复旧标题(默认情况下只是“终端”,但更好的是显示当前位置)?

use*_*686 6

将 set-title 转义序列添加到 shell 的 rc 文件中。对于bashv4,这将是:

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
Run Code Online (Sandbox Code Playgroud)

在您的~/.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
Run Code Online (Sandbox Code Playgroud)

实际上,那是我的 ~/.bashrc片段。发现后,PROMPT_DIRTRIM=1我必须将$PS1修改(最后一条if语句)替换为:

update_title() {
    title "$USER@$HOSTNAME ${PWD/#$HOME/~}"
}
PROMPT_COMMAND="update_title"
Run Code Online (Sandbox Code Playgroud)