问题描述
我们在工作场所拥有单独的环境,用于开发,测试,集成和暂存。
在这些环境中,我们在DNS中超载了主机名-例如在开发环境中,主Web机称为web1.dev.example.com
,在测试环境中,主Web机称为web1.test.example.com
。
为了区分不同环境中的计算机,我想自定义bash提示以显示FQDN,而不仅仅是主机名。好,好;我应该能够用$PS1
中的\H
替换\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\]\$ "
iain@ub10-04-1.lan: ~$
编辑:
进一步的研究表明,/etc/hostname
(Ubuntu)和/etc/sysconfig/network
(CentOS)的内容是相关的。如果FQDN在文件中,则\H
可以正常工作。
Ubuntu的hostname(1)手册页确实指出您不应将FQDN放在/etc /hostname中,但没有给出原因。
次佳答案
主机名的短短和长短疯狂到极点,要一直正确设置它很困难-所以我放弃了,让一切都使用FQDN作为主机名…
我在您的环境中执行与您相同的操作,但是由于我知道我在哪个站点上,所以我在提示中砍掉了FQDN,这样可以节省空间。我还根据环境提示colour-code,因此当我在”important”某处做某事时,会有更好的警告。我还将space-separate的路径设置为其他路径,以简化copy-pasta的密码。我的股票/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
而且,就”ugliness”而言,谁在乎显示提示的代码是什么样的?无论如何,大部分时间都是write-only代码。