我更改了主机名,为什么我的 bash PS1 提示符没有变化?

我更改了主机名,为什么我的 bash PS1 提示符没有变化?

我通过编辑 /etc/hostname 更改了主机名,并且可以使用hostnamehostname -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包含新主机名也是如此。

答案1

我正在根据基思和沃伦之前的回答以及实际的解决方案来回答我自己的问题。感知到的问题是“我更改了主机名,为什么我的 bash PS1 提示符没有变化?”实际的问题是“为什么我的系统在重新启动时恢复为旧主机名?”

这个特殊案例的答案是:DHCP 配置为覆盖本地设置。

更改主机名的有效方法

以下内容适用于Ubuntu,ymmv

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

    echo 'mynewhostname' | sudo tee /etc/hostname
    
  2. 要更改正在运行的系统的主机名,请使用主机名命令。如果没有步骤 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) 提供的我的托管服务的说明我真的应该正确阅读。

答案2

该文件/etc/hostname保存主机名的持久副本,并在启动期间用于设置运行时副本。要更改运行时副本而不重新启动,请说:

$ sudo hostname `cat /etc/hostname`

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

答案3

  • h将您的 中的大写PS1

    PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
    

答案4

我看到您有/h然后PS1提到 FQDN,现在,您可以发布您尝试使用的旧主机名和新主机名吗?

  • /h显示第一个“.”之前的主机名
  • /H显示完整的 FQDN

试一试

相关内容