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

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

在我的工作场所,我们有用于开发、测试、集成和登台的独立环境。

在这些环境中,我们在 DNS 中重载了主机名 - 例如在开发环境中,主 Web 机器称为web1.dev.example.com,而在测试环境中,主 Web 机器为web1.test.example.com

为了区分不同环境中的机器,我想自定义 bash 提示符以显示 FQDN 而不仅仅是主机名。很好;我应该能够用\hin\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)。hostnamehostname -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

相关内容