ard*_*new 2 bash shell subshell
我有一个bash提示符,包含我的主机名使用\h变量(解释PS1)或$(uname -n).无论我使用哪一个似乎没有什么区别.
对于软件许可证的原因,有时我不得不改变我的主机名,这是通过调用脚本,更新文件来完成/etc/hosts和/etc/hostname,并呼吁$ hostname NEWNAME良好的措施.
当脚本更新我的主机名时,我希望调用脚本的shell有PS1提示反映更改 - 显示新的主机名.我知道这样做的唯一方法是通过资源我的.bashrc定义PS1.但是. "${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);
}
Run Code Online (Sandbox Code Playgroud)
虽然shell也将shell变量初始化为HOSTNAME相同的值,但它不是双向关系:您无法current_host_name通过修改来更新HOSTNAME.修复此问题需要修补shell.
同 $(uname -n)
仅当您在分配时使用单引号时,才会PS1动态更新.那是:
# Check uname every time the prompt is rendered
PS1='....$(uname -n)...'
Run Code Online (Sandbox Code Playgroud)
不
# Check uname only once, at shell startup
PS1="....$(uname -n)..."
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1956 次 |
| 最近记录: |