【发布时间】:2013-01-16 02:39:18
【问题描述】:
我的 .zshrc 中有以下代码:
local ruby_version=''
if which rvm-prompt &> /dev/null; then
ruby_version="$(rvm-prompt i v g)"
else
if which rbenv &> /dev/null; then
ruby_version="$(rbenv version | sed -e "s/ (set.*$//")"
fi
fi
我的 RPS1 提示符中有此代码:
RPS1='${PR_GREEN}$(virtualenv_info)%{$reset_color%} ${PR_RED}${ruby_version}%{$reset_color%}'
(为简洁起见,我没有展示设置 PR_ 颜色或确定虚拟环境的代码 - 两者都有效。)
当一个新的 shell 被创建(新窗口或 iTerm2 中的新标签)时,Ruby 信息是正确的。但是,如果我切换到使用不同 Ruby 的项目(由 .ruby-version 文件确定),则右侧提示中显示的 Ruby 信息不会刷新。如果我重新获取我的 .zshrc 文件,则右侧提示会刷新。
我是否需要将确定 Ruby 版本的代码封装在一个函数中?顺便说一句,我的 .zshrc 中也有 setopt promptsubst。
当我更改目录时,我错过了什么会阻止右提示刷新?
【问题讨论】:
-
如果我用单引号括住
$(rbenv version | see -e "s/ (set.$//")行,那么我会在右侧提示符中看到该字符串。当该行用双引号括起来时,如原始问题所示,那么我只有在采购~/.zshrc之后才能看到当前的 Ruby。