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