如果远程运行,只在bash提示符中列出主机?

时间:2014-05-20 08:59:18

标签: bash ps1

我正在尝试修改我的Bash提示符;这就是$PS1目前所看到的方式(为了清晰起见,编辑了颜色):

PS1='\u@\h:\w\$ '

结果是:

andreas@tablet-2710p-ubuntu:~$ 

如果我正在运行当前的Bash会话本地而不是访问远程,我是否可以调整提示以隐藏@tablet-2710p-ubuntu位(由@\h表示)服务器

我还宁愿不对它进行硬编码(例如,只是替换任何出现的tablet-2710p-ubuntu)以便于移植,以及以后更改主机名。

2 个答案:

答案 0 :(得分:8)

How can I detect if the shell is controlled from SSH?中所述,如果设置了$SSH_CLIENT$SSH_TTY变量,则表示您通过SSH进行连接。

如果您使用的是基于Debian的系统(例如Ubuntu),则可以将.bashrc编辑为类似的内容,以达到预期的效果(请注意PS1设置的字符串到has to be defined with double quotes,而不是默认的单引号:

if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
    if [ "$color_prompt" = yes ]; then
        host="@\[\033[1;34m\]\h\[\033[00m\]"
    else
        host="@\h"
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]${host}:\[\033[01;34m\]\w\[\033[00m\]\$ "
else
    PS1="${debian_chroot:+($debian_chroot)}\u${host}:\w\$ "
fi
unset host
unset color_prompt force_color_prompt

结果如下:

BASH: Hide host when running locally, show host when connecting over SSH

附注:这些更改应在您要将连接到.bashrc(或.profile,具体取决于分发)上进行>通过SSH。在您自己的本地Bash配置文件中设置它们对连接到其他远程服务器时显示的内容没有影响。

答案 1 :(得分:5)

你想要下面这样的东西吗? :

if [ "$SSH_CONNECTION" ]; then 
    PS1='\u@\h:\w\$ '
else
    PS1='\u:\w\$ '
fi