是否可以将我连接到的任何主机的Gnome Terminal的标题设置为“ user @ host”?


22

我想将终端标题设置为,user@host以便可以从窗口标题中轻松分辨出我连接的是哪台机器。有没有办法从SSH或GNOME终端执行此操作?

Answers:


20

是。这是使用PS1的bash的示例,应该与发行版无关:

具体来说,转义序列\[\e]0; __SOME_STUFF_HERE__ \a\]是令人关注的。我已经对其进行了编辑,以使其更加清晰。

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

TITLEBAR='\[\e]0;\u@\h\a\]'
# Same thing.. but with octal ASCII escape chars
#TITLEBAR='\[\033]2;\u@\h\007\]'

if [ "$color_prompt" = yes ]; then
    PS1="${TITLEBAR}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ "
else
    PS1="${TITLEBAR}\u@\h:\W\$ "
fi
unset color_prompt force_color_prompt

还要注意,根据所使用的终端程序和外壳程序,可以使用多种方式设置xterm的标题。例如,如果您使用的是KDE的Konsole,则可以通过转到Settings-> Configure Profiles-> Edit Profile-> Tabs并设置Tab title formatRemote tab title format设置来覆盖标题设置。

Konsole标题栏设置对话框

此外,您可能想签出:


那么,是否需要在要连接到的所有服务器上或在自己的本地计算机上设置此设置?
Naftuli Kay 2011年

@TKKocheran:您需要在运行Shell的每台机器上执行此操作。如果只想进行远程登录,则\h仅在$SSH_CLIENT非空时才输入提示。
吉尔(Gilles)'所以

@TK:是的,您需要在连接到的所有服务器上进行设置。PS1变量是当前外壳程序(甚至在远程主机上)本地的,而不是终端程序(即:gnome-terminal)
TrinitronX

我假设这将在不运行Debian的服务器上以不同的方式应用。您可以编辑答案以提供运行Fedora / Red Hat衍生产品的服务器吗?
纳夫图利凯2011年

1
@TK:我使用SSH在Ubuntu 11.04计算机上的各种主机上测试了此操作...因此标题栏已在此处正确设置...如果不起作用,请尝试将此序列添加到前面:\[\e]2;\u@\h\a。(也使用该信息编辑了我的回复)
TrinitronX

3

这是我使用的SSH bash脚本的版本,该脚本可设置远程服务器的标题和命令提示符,而无需对远程服务器进行任何更改。

my_ssh.sh:

#!/bin/bash
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
ssh -t $1@$2 "export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"

您可以通过调用./my_ssh.sh用户名主机名来调用它


我怀疑这在ssh登录后启动另一个bash会话时是否有效(例如,使用屏幕时)
Laurens Rietveld

1

以下对我有用(可能仅在gnome-terminal上):

comp@home$ cat /usr/bin/ssh
#!/bin/bash    
echo -ne "\033]0;${1}\007"
ssh_bkup "$@"

其中ssh_bkup命令只是具有更改名称的基本“ ssh”,在echo命令更改当前终端的标题后立即调用该名称。


别名解决方案是否比将命令重命名为非标准更好?
X Tian

这对我来说也很好,对于gnome-terminal也是如此。~/bin在我的路径中具有优先权,因此我将您的脚本放在~/bin/ssh。最后一行明确调用/usr/bin/ssh。这样,其他用户ssh在该计算机上登录时仍会使用该标准,并且(由于我们的主目录位于服务器上,LDAP帐户)我可以在我登录的任何计算机上使用该功能。
Gauthier

好的,@ Gauthier。似乎是更好的解决方案。
Yuriy Mankovskiy

0

这是别名版本

SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
SETPC="export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"

alias myssh='function _myssh(){ ssh -t $1@$2 $SETPC; };_myssh'
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.