在 Bash PS1 提示符中动态更改主机名
Dynamically change hostname in Bash PS1 prompt
我有一个 bash 提示,其中包括使用 \h
变量(由 PS1
解释)或 $(uname -n)
的主机名。无论我使用哪个似乎都没有什么不同。
出于软件许可的原因,有时我不得不更改我的主机名,这是通过调用更新文件 /etc/hosts
和 /etc/hostname
的脚本来完成的,并且还会永久调用 $ hostname NEWNAME
措施。
当脚本更新我的主机名时,我希望调用脚本的 shell 的 PS1
提示反映更改——以显示新的主机名。我知道做到这一点的唯一方法是为定义 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
修改 HOSTNAME
。解决这个问题需要修补 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 提示,其中包括使用 \h
变量(由 PS1
解释)或 $(uname -n)
的主机名。无论我使用哪个似乎都没有什么不同。
出于软件许可的原因,有时我不得不更改我的主机名,这是通过调用更新文件 /etc/hosts
和 /etc/hostname
的脚本来完成的,并且还会永久调用 $ hostname NEWNAME
措施。
当脚本更新我的主机名时,我希望调用脚本的 shell 的 PS1
提示反映更改——以显示新的主机名。我知道做到这一点的唯一方法是为定义 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
修改HOSTNAME
。解决这个问题需要修补 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)..."