We've got seperate environments at my workplace for development, testing, integration, and staging.
Within those envs, we've overloaded the hostnames in DNS – e.g. in the dev environment, the primary web machine is called web1.dev.example.com
, and in the test environment, the primary web machine is web1.test.example.com
.
To distinguish between machines in the different environments, I want to customise the bash prompts to display the FQDN rather than just the hostname. Well and good; I should be able to replace \h
with \H
in $PS1
, right? Hmm. They show the exact same thing.
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: ~$
In /etc/hostname
, I've got just the hostname (web1
). hostname
and hostname -f
both return the correct results ("web1" and "web1.test.example.com" respectively), and I've got the correct entries in /etc/hosts
.
What gives?
These are Ubuntu 10.04 hosts, if that makes a difference.
Best Answer
Try using an explicit call to
hostname -f
to get the fqdn of the systeme.g.
EDIT:
Further research shows that the contents of
/etc/hostname
(Ubuntu) and/etc/sysconfig/network
(CentOS) are relevant. If the FQDN is in the file then the\H
works correctly.The hostname(1) man page for Ubuntu does though say that you shouldn't put the FQDN in /etc/hostname but gives no reason as to why.