在Bash PS1提示符中动态更改主机名

时间:2017-10-08 21:14:01

标签: bash shell subshell

我有一个bash提示符,其中包含我的主机名,使用\h变量(由PS1解释)或$(uname -n)。无论我使用哪一个似乎没有什么区别。

出于软件许可的原因,我有时需要更改主机名,这是通过调用更新文件/etc/hosts/etc/hostname的脚本来完成的,并且还可以调用$ hostname NEWNAME以获得良好的衡量标准。

当脚本更新我的主机名时,我希望调用脚本的shell有PS1提示反映更改 - 显示新的主机名。我知道这样做的唯一方法是通过资源.bashrc来定义PS1。但是根据我的理解,在脚本中调用. "${HOME}/.bashrc"只会修改该脚本的环境而不是调用者的环境。

那么如何更新调用方PS1提示符以自动显示新主机名?

1 个答案:

答案 0 :(得分:5)

  • 使用\h

    Bash使用内部变量current_host_name。要引用设置它的代码,在启动时仅运行一次

       
    /* It's highly unlikely that this will change. */
    if (current_host_name == 0)
      {
        /* Initialize current_host_name. */
        if (gethostname (hostname, 255) < 0)
          current_host_name = "??host??";
        else
          current_host_name = savestring (hostname);
      }
    

    虽然shell也将shell变量HOSTNAME初始化为相同的值,但它不是双向关系:您无法通过修改{{1}来更新current_host_name }}。修复此问题需要修补shell。

  • 使用HOSTNAME

    只有在将其分配给$(uname -n) 时使用单引号时,才会动态更新。那就是:

    PS1

    # Check uname every time the prompt is rendered
    PS1='....$(uname -n)...'