我们在工作场所有独立的环境进行开发,testing,集成和分期。
在这些envs中,我们已经在DNS中重载了主机名 – 例如在开发环境中,主要的web机器被称为web1.dev.example.com ,而在testing环境中,主要的web机器是web1.test.example.com 。
为了区分不同环境中的机器,我想定制bash提示来显示FQDN,而不仅仅是主机名。 那么好, 我应该能够用\H在$PS1replace\h ,对吧? 嗯。 他们显示完全相同的东西。
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\]\$ " [email protected]: ~$
编辑:
进一步的研究表明, /etc/hostname (Ubuntu)和/etc/sysconfig/network (CentOS)的内容是相关的。 如果FQDN在文件中,那么\H工作正常。
Ubuntu的主机名(1)手册页虽然说,你不应该把FQDN放在/ etc / hostname中,但是没有理由为什么。
关于主机名的疯狂疯狂的数量,无论是长短的,总是很难 – 所以我只是放弃,并使一切使用的FQDN作为主机名…
在我的环境中,我的工作和你一样,但是我在提示中删掉了FQDN,因为我知道我在哪个站点上,并且节省了空间。 我还根据环境对提示进行了颜色编码,所以我在“重要”某处做了更好的警告。 我也将空间与其他所有的path分开,以便于复制意大利面。 我的股票/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
而且,就“丑”而言,谁在乎显示提示的代码是什么样的? 无论如何,它大部分时间都是只写代码。
这是Ubuntupipe理/ etc / hostname的一个错误。
问题提交: https : //bugs.launchpad.net/ubuntu/+source/bash/+bug/1276796