我更改了主机名,为什么我的bash PS1提示符不变


21

我通过编辑/ etc / hostname更改了主机名,并可以使用hostnameand hostname -F命令查看新的主机名。

但是,shell提示符仍显示旧的主机名。

顺便说一下,这是Ubuntu 11.0.4。提示设置在我.bashrc尚未编辑的位置。注销甚至重新启动均无效。

标准Ubuntu的相关部分.bashrc

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

(我登录时未设置$ debian_chroot ...)

我猜主机名是由特殊字符\ h选取的。

这是Shell中报告的PS1设置:

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

PS1显示了以下内容:

username@oldhostname:~$ 

我使用沃伦答案中的确切命令重复了该过程。事实证明,主机名在重新启动之前一直有效,但是即使/etc/hostname包含了新的主机名,它也会丢失。


是什么echo $PS1节目?
基思

@Keith-我更新了问题以显示PS1。
Dizzley

感谢您的更新,这让我失望了,因为我不记得dhcp可以做到这一点,因为我从不放过它。也感谢您返回并停留在问题的最前面,(最后)添加了您的编辑作为答案,欢迎来到unix.SE!
Caleb

Answers:


24

根据Keith和Warren先前的回答以及实际的解决方案,我在回答自己的问题。感觉到的问题是“我更改了主机名,为什么我的bash PS1提示符未更改?” 实际的问题是“为什么我的系统在重新启动时恢复为原来的主机名?”

在这种特殊情况下的答案是:DHCP配置为覆盖本地设置。

更改主机名的有效方法

以下内容适用于Ubuntu ymmv

  1. 通过编辑文件更改永久主机名/etc/hostname

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. 要更改正在运行的系统的主机名,请使用hostname命令。如果没有步骤1,它将在重启时重置。使用刚刚设置的值很有意义:

    sudo hostname -F /etc/hostname

    或其等效项:

    sudo hostname `cat /etc/hostname`
  3. 在中设置标准域名(FQDN)/etc/hosts

    摘抄:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. 检查机器是否正在运行DHCP客户端。除了IP地址,DHCP服务器还可以覆盖主机名和DNS解析之类的设置。“云”托管服务可能会执行此操作,因此磁盘上的计算机映像可以重复使用多次,而无需编辑配置文件。

    如果存在,请编辑DHCP客户端配置文件/etc/default/dhcpcd以注释掉该SET_HOSTNAME指令:

    #SET_HOSTNAME='yes'
  5. 如果可能,请重新引导系统并使用以下方法检查名称是否已更改:

    hostname

第4步对我来说是个新闻,吸引了我。我认为在此答案中记录整个过程会很有用。该步骤是出于(Linode)我的托管服务的说明,我确实应该正确阅读。


如果这个答案似乎合适,那么我将不胜感激,因为我不能投票赞成自己的答案。
Dizzley 2011年

2

该文件/etc/hostname包含主机名的永久副本,并在启动期间用于设置运行时副本。要在不重新启动的情况下更改运行时副本,请说:

$ sudo hostname `cat /etc/hostname`

或者只是将新的主机名作为参数传递给hostname(1)命令。


我的问题是持久性。我使用并验证了运行时主机名(请参阅问题)。另外,“ sudo主机名-F / etc / hostname”是命令的另一种形式(man主机名)。但是,我按照您的建议做了。主机名在重新引导时丢失。:(我也把FQDN到/etc/host.conf然后/etc/host.conf中设置为仅使用绑定我仍处于亏损状态。
Dizzley

我已经用解决方案更新了Q,稍后会回答我自己的问题。谢谢沃伦/基思。
迪兹利2011年

那应该是“我也将FQDN放入/ etc / hosts”。
迪兹利2011年

-1

我看到您已经加入/hPS1FQDN,现在,您可以张贴您要使用的旧主机名和新主机名吗?

  • /h 显示主机名,直到第一个“。”
  • /H 显示完整的FQDN

试试看


嗨,jekto。注意:\ h不是/ h。在生产服务器上,我喜欢将主机名保持私有,因此“ oldname”和“ newname”(不带点)。我是Unix的老手,但这让我感到困惑-我从未见过dhcpcd这样使用。看起来PS1提示符错误,但是真正的问题是/ etc / hostname在启动时被dhcpcd覆盖。使用Dhcpcd是因为可以将我的机器映像重新部署或复制到另一个IP地址设置上,因此托管人Linode使用DHCP生成默认值,因此Ubunto映像的每个实例都是唯一的。我是一个云计算初学者,所以这很有趣。
迪兹利2011年

-1
  • 请在h中大写PS1

    PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.