Назад | Перейти на главную страницу

Приглашение Bash в Ubuntu - полное доменное имя (\ H) такое же, как имя хоста (\ h)

У нас есть отдельные среды на моем рабочем месте для разработки, тестирования, интеграции и постановки.

В этих env мы перегрузили имена хостов в DNS - например, в среде разработки основная веб-машина называется web1.dev.example.com, а в тестовой среде основной веб-машиной является web1.test.example.com.

Чтобы различать машины в разных средах, я хочу настроить приглашения bash для отображения полного доменного имени, а не только имени хоста. Ну и хорошо; Я смогу заменить \h с участием \H в $PS1, право? Хм. Они показывают одно и то же.

me@web1:~$ hostname
web1
me@web1:~$ hostname -f
web1.dev.example.com
me@web1:~$ export PS1="\[\u@\h: \w\]\$ "
me@web1: ~$ export PS1="\[\u@\H: \w\]\$ "
me@web1: ~$ 

В /etc/hostname, У меня есть просто имя хоста (web1). hostname и hostname -f оба возвращают правильные результаты ("web1" и "web1.test.example.com" соответственно), и у меня есть правильные записи в /etc/hosts.

Что дает?

Это хосты Ubuntu 10.04, если это имеет значение.

Попробуйте использовать явный вызов hostname -f чтобы получить fqdn системы

export PS1="\[\u@$(hostname -f): \w\]\$ "

например

iain$ export PS1="\[\u@$(hostname -f): \w\]\$ "
iain@ub10-04-1.lan: ~$ 

РЕДАКТИРОВАТЬ:

Дальнейшие исследования показывают, что содержание /etc/hostname (Ubuntu) и /etc/sysconfig/network (CentOS) актуальны. Если полное доменное имя находится в файле, то \H работает правильно.

На странице руководства hostname (1) для Ubuntu говорится, что вы не должны помещать полное доменное имя в / etc / hostname, но не объясняет, почему.

Существует безумное безумие насчет имен хостов, коротких и длинных, и постоянно делать это правильно жесткий - поэтому я просто сдаюсь и заставляю все использовать полное доменное имя в качестве имени хоста ...

Я делаю то же, что и вы, в своей среде, но я сокращаю полные доменные имена в подсказке, потому что я знать на каком я сайте, и это экономит место. Я также кодирую свое приглашение цветом в зависимости от среды, чтобы лучше предупреждать, когда я делаю что-то «важное». Я также отделяю путь от всего остального пробелом, чтобы упростить копирование pwd-пасты. Фрагмент из моих запасов /etc/profile:

if hostname -f | grep -q '\.stg\.example\.com'; then
  _ROOT_COLOR=33  # yellow
  _USER_COLOR=36  # cyan
else
  _ROOT_COLOR=31  # red
  _USER_COLOR=32  # green
fi

if [ "`id -u`" -eq 0 ]; then
  PS1="\[\033[01;${_ROOT_COLOR}m\]$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w #\[\033[00m\] "
else
  PS1="\[\033[01;${_USER_COLOR}m\]\u@$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w $\[\033[00m\] "
fi

И что касается «уродства», кого волнует, как выглядит код для отображения подсказки? В любом случае, в большинстве случаев это код только для записи.

Это ошибка в том, как Ubuntu управляет / etc / hostname.

Сообщение об ошибке: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1276796