首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法用direnv覆盖PS1

无法用direnv覆盖PS1
EN

Stack Overflow用户
提问于 2019-10-21 14:05:37
回答 1查看 1.3K关注 0票数 3

我在跟踪PS1上的direnv wiki。我的档案中有以下相关条目。

.bashrc

代码语言:javascript
复制
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

代码语言:javascript
复制
export KUBECONFIG=~/.config/kube/homelab.yaml
export KUBE_PS1_ENABLED=on
export CUSTOM_PS1='$(kube_ps1) $ '
PATH_add scripts

我允许使用最新版本的.envrcdirenv allow。但是,当切换到目录时,自定义PS1值不会被设置,尽管这些值似乎是正确的。

代码语言:javascript
复制
$ 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钩子的一部分重新评估。

如何使用PS1更改direnv的值

EN

回答 1

Stack Overflow用户

发布于 2021-01-18 13:18:29

direnv wiki提到,作者必须“将PS1列为可以更改的环境变量”,主要是因为“核心问题是PS1是一个局部变量。”因此,我不认为使用.envrc文件间接修改PS1的解决方案是可行的。

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

因为链接会死,所以我在这里复制它:

  1. 将以下内容添加到~/..bashrc (me:我用~/..zshrc进行了测试,而且它也能工作)
代码语言:javascript
复制
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. 然后再次源文件。
代码语言:javascript
复制
source ~/.bashrc

wiki还提到将unset PS1添加到.envrc文件中,这将删除有关direnv: PS1 cannot be exported...的任何错误,我可以确认这也适用于此场景。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58487996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档