无法使用 direnv 覆盖 PS1

  • 本文关键字:覆盖 PS1 direnv direnv
  • 更新时间 :
  • 英文 :


我正在PS1上关注direnv wiki。我的文件中有以下相关条目。

.bashrc

DEFAULT_PS1='[$(ppwd)]u@h:w$(__git_ps1 " (%s)")'
# add some more things to DEFAULT_PS1, conditionally
DEFAULT_PS1+='> '
PS1=${CUSTOM_PS1:-$DEFAULT_PS1}
# optional bashrc file extensions
for f in ~/.bashrc_*; do test -s $f && . $f || true; done
eval "$(direnv hook bash)"

.envrc

export KUBECONFIG=~/.config/kube/homelab.yaml
export KUBE_PS1_ENABLED=on
export CUSTOM_PS1='$(kube_ps1) $ '
PATH_add scripts

我已经允许最新版本的.envrcdirenv allow.但是,当更改为目录时,未设置自定义PS1值,尽管这些值似乎是正确的

$ cd -
/home/robert/sources/oss/sling-cloud-native
direnv: loading .envrc
direnv: export +CUSTOM_PS1 +KUBE_PS1_ENABLED ~KUBECONFIG ~PATH
$ echo $PS1
[$(ppwd)]u@h:w$(__git_ps1 " (%s)")$(kube_ps1)>
$ echo $CUSTOM_PS1
$(kube_ps1) $

我不确定 wiki 中的解决方案应该如何工作,因为显然 PS1 的值在第一次加载.bashrc文件时设置为DEFAULT_PS1,并且不会作为direnv钩子的一部分重新评估。

如何使用direnv更改 PS1 的值?

direnv wiki 提到作者不得不"将 PS1 列入黑名单,将其作为可以更改的环境变量",主要是因为"核心问题是 PS1 是一个局部变量"。 因此,我认为涉及使用.envrc文件间接修改PS1的解决方法不起作用。

我在python虚拟环境中遇到了类似的问题,我意识到它与您的用例不同,但是此博客中有一个示例可能会有所帮助。

因为链接可能会死,所以我在这里重现它:

  1. 将以下内容添加到 ~/.bashrc(我:我用 ~/.zshrc 对此进行了测试,它也可以工作(
show_virtual_env() {
if [[ -n "$VIRTUAL_ENV" && -n "$DIRENV_DIR" ]]; then
echo "($(basename $VIRTUAL_ENV))"
fi
}
export -f show_virtual_env
PS1='$(show_virtual_env)'$PS1
  1. 然后再次获取文件
source ~/.bashrc

维基还提到将unset PS1添加到.envrc文件中,这消除了有关direnv: PS1 cannot be exported...的任何错误,我可以确认这也适用于这种情况。

也许你可以做类似的事情;使用.envrc像你正在做的那样导出环境变量,但删除行export CUSTOM_PS1='$(kube_ps1) $ ',并在你的~/.bashrc创建一个函数,检查你是否设置了KUBE_PS1_ENABLED,并将'$(kube_ps1) $ '附加到PS1是否设置了。

相关内容

  • 没有找到相关文章

最新更新