Только указывать хост в командной строке 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
Что приводит к следующему:
Примечание: эти изменения должны быть внесены в .bashrc
(или же .profile
в зависимости от дистрибутива) на сервере, к которому вы подключаетесь через SSH. Установка их в вашем локальном профиле Bash не влияет на то, что отображается при подключении к другим удаленным серверам.
Вы хотите что-то вроде ниже?:
if [ "$SSH_CONNECTION" ]; then
PS1='\u@\h:\w\$ '
else
PS1='\u:\w\$ '
fi