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


2

我正在运行gnome-terminal set来根据更新自己标题的终端命令来更新它的标题(默认情况下在Fedora 13上)。当我通过SSH连接到其他地方时,标题会正确更新,但是SSH退出并且gnome-terminal表示我仍然远程登录。这在尝试浏览时很容易混淆。如何在登录时保持行为,并在注销时恢复旧标题(默认情况下只是“终端”,但更好地显示当前位置)?


你在本地使用哪种外壳?
Ignacio Vazquez-Abrams

现在没有访问权限,相当肯定它是bash - 无论Fedora 13上的gnome-terminal默认是什么。
Sam Brightman

我使用几个包装器命令修复它到ssh和su: unix.stackexchange.com/a/341277/112190
phyatt

Answers:


6

将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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.