ubuntu – Bash Prompt on Ubuntu: FQDN Same as Hostname

bashfqdnUbuntu

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 system

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

e.g.

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

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.