在我的工作场所,我们有用于开发、测试、集成和登台的独立环境。
在这些环境中,我们在 DNS 中重载了主机名 - 例如在开发环境中,主 Web 机器称为web1.dev.example.com
,而在测试环境中,主 Web 机器为web1.test.example.com
。
为了区分不同环境中的机器,我想自定义 bash 提示符以显示 FQDN 而不仅仅是主机名。很好;我应该能够用\h
in\H
替换$PS1
,对吧?嗯。它们显示的内容完全相同。
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 主机,如果这有区别的话。
答案1
尝试使用显式调用来hostname -f
获取系统的 fqdn
export PS1="\[\u@$(hostname -f): \w\]\$ "
例如
iain$ export PS1="\[\u@$(hostname -f): \w\]\$ "
[email protected]: ~$
编辑:
/etc/hostname
进一步的研究表明, (Ubuntu)和(CentOS)的内容/etc/sysconfig/network
是相关的。如果 FQDN 在文件中,则\H
工作正常。
但是 Ubuntu 的 hostname(1) 手册页确实说过不要将 FQDN 放在 /etc/hostname 中,但没有说明原因。
答案2
关于主机名,有长有短,有太多疯狂的想法,始终确保主机名正确无误难的——所以我放弃并让所有内容都使用 FQDN 作为主机名...
我在我的环境中做了和你一样的事情,但我在提示符中删去了 FQDN,因为我知道我所在的网站,这样可以节省空间。我还根据环境对提示进行颜色编码,这样当我在“重要”的地方做某事时,我会得到更好的警告。我还用空格将路径与其他所有内容分开,以便于复制粘贴 pwd。来自我的库存的片段/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
并且,就“丑陋”而言,谁在乎显示提示的代码是什么样子的呢?无论如何,它大多数时候都是只写代码。
答案3
这是 Ubuntu 管理 /etc/hostname 的一个错误。
错误报告: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1276796