当前位置: 首页>>技术教程>>正文


Ubuntu上的Bash提示-FQDN(\ H)与主机名(\ h)相同

, ,

问题描述

我们在工作场所拥有单独的环境,用于开发,测试,集成和暂存。

在这些环境中,我们在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)。 hostnamehostname -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代码。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10840.html,未经允许,请勿转载。