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

14

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

В этих envs мы перегрузили имена хостов в DNS - например, в среде dev вызывается основной веб-компьютер 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, если это имеет значение.

Бен Уильямс
источник

Ответы:

18

Попробуйте использовать явный вызов 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, но не дает объяснения, почему.

иан
источник
Это довольно уродливо :( Но это работает. Я мог бы оставить это открытым немного дольше, было бы очень приятно иметь "чистое" исправление.
Бен Уильямс
Похоже, это связано с Debian / Ubuntu. Это работает, как и ожидалось в Centos.
user9517
1
Да, это определенно проблема Ubuntu. Я закончил тем, что использовал ваше предлагаемое решение; Я действительно должен сообщить об этом как об ошибке в Bash в Ubuntu.
Бен Уильямс
@BenWilliams: обновленный ответ с тем, что должно сделать его менее пугающим.
user9517
Я также обнаружил ту же неоднозначность в документации по настройке имени хоста в Ubuntu. Не уверен, как решить это.
Dogweather
4

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

Я делаю то же самое, что и вы, в своих средах, но я вырываю полные доменные имена в приглашении, потому что я знаю, на каком сайте я работаю, и это экономит место. Я также окрашиваю свою подсказку в цвет, чтобы лучше предупреждать, когда я делаю что-то «важное». Я также разделяю путь пробелом от всего остального, чтобы упростить копирование-pasta 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

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

ombble
источник
1
+1 за использование цвета.
Саад Масуд