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