gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:18:37 25 4
gpt4 key购买 nike

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

由于软件许可原因,我有时必须更改主机名,这是通过调用更新文件 /etc/hosts/etc/hostname 的脚本来完成的,并且还调用 $ hostname NEWNAME 以达到良好的效果。

当脚本更新我的主机名时,我希望调用该脚本的 shell 使其 PS1 提示符反射(reflect)更改 - 显示新的主机名。我知道做到这一点的唯一方法是通过资源定义 PS1.bashrc 。但调用 .据我了解,脚本中的“${HOME}/.bashrc”只会修改该脚本的环境,而不是调用者的环境。

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

最佳答案

  • \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 初始化为相同的值,但这不是双向关系:您无法通过修改 来更新 current_host_name主机名。解决这个问题需要修补 shell。

  • 使用$(uname -n)

    仅当您在将其分配给 PS1 时使用单引号时,该值才会动态更新。即:

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

    不是

    # Check uname only once, at shell startup
    PS1="....$(uname -n)..."

关于bash - 在 Bash PS1 提示符中动态更改主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46636132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com