我有一个bash提示符,其中包含我的主机名,使用\h
变量(由PS1
解释)或$(uname -n)
。无论我使用哪一个似乎没有什么区别。
出于软件许可的原因,我有时需要更改主机名,这是通过调用更新文件/etc/hosts
和/etc/hostname
的脚本来完成的,并且还可以调用$ hostname NEWNAME
以获得良好的衡量标准。
当脚本更新我的主机名时,我希望调用脚本的shell有PS1
提示反映更改 - 显示新的主机名。我知道这样做的唯一方法是通过资源.bashrc
来定义PS1
。但是根据我的理解,在脚本中调用. "${HOME}/.bashrc"
只会修改该脚本的环境而不是调用者的环境。
那么如何更新调用方PS1
提示符以自动显示新主机名?
答案 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)...'