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.
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.
There is an insane amount of craziness about hostnames, short and long, and getting it right all the time is hard -- so I just give up and make everything use the FQDN as the hostname...
I do the same thing as you in my environments, but I chop down the FQDNs in the prompt because I know what site I'm on, and it saves space. I also colour-code my prompt based on environment so I've got a better warning of when I'm doing something somewhere "important". I also space-separate the path from everything else, to make it easy to copy-pasta pwd. A snippet from my stock
/etc/profile
:And, as far as "ugliness" goes, who cares what the code to display the prompt looks like? It's write-only code most of the time, anyway.
That is a bug with how Ubuntu manages /etc/hostname.
Bug filed: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1276796