Только указывать хост в командной строке bash, если работает удаленно?

Я пытаюсь изменить мою подсказку Bash на мою волю; вот как $PS1 выглядит на данный момент (с ясными цветами, отредактированными):

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

Что приводит к:

andreas@tablet-2710p-ubuntu:~$ 

Можно ли настроить подсказку, чтобы она скрывала @tablet-2710p-ubuntu бит (представлен @\h) если я запускаю текущий сеанс Bash локально, а не обращаюсь к удаленному серверу?

Я также предпочел бы не кодировать его жестко (например, просто заменить любое вхождение tablet-2710p-ubuntu) ради переносимости, и в случае, если имя хоста будет изменено позже.

2 ответа

Решение

Как показано в разделе Как я могу определить, управляется ли оболочка из SSH? если одна из переменных $SSH_CLIENT или же $SSH_TTY установлены, это означает, что вы подключаетесь через SSH.

Если вы работаете в системе на основе Debian (например, Ubuntu), вы можете отредактировать .bashrc что-то подобное, чтобы достичь желаемого эффекта (обратите внимание, что строка, которая PS1 устанавливается в должно определяться двойными кавычками, а не одинарными, как по умолчанию):

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: скрыть хост при локальном запуске, показать хост при подключении через SSH

Примечание: эти изменения должны быть внесены в .bashrc (или же .profileв зависимости от дистрибутива) на сервере, к которому вы подключаетесь через SSH. Установка их в вашем локальном профиле Bash не влияет на то, что отображается при подключении к другим удаленным серверам.

Вы хотите что-то вроде ниже?:

if [ "$SSH_CONNECTION" ]; then 
    PS1='\u@\h:\w\$ '
else
    PS1='\u:\w\$ '
fi
Другие вопросы по тегам