2

我正在关注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

我已经允许使用最新版本的.envrcwith direnv 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 的值在第一次加载文件时设置为 DEFAULT_PS1并且没有作为钩子.bashrc的一部分重新评估。direnv

如何使用 更改 PS1 的值direnv

4

1 回答 1

2

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

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

也许你可以做类似的事情;使用.envrc在您正在执行的操作时导出环境变量,但删除该行export CUSTOM_PS1='$(kube_ps1) $ '并在您的~/.bashrcmake 函数中检查您是否已设置KUBE_PS1_ENABLED并附'$(kube_ps1) $ '加到PS1是否已设置。

于 2021-01-18T13:18:29.397 回答