我在跟踪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我允许使用最新版本的.envrc和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的值是在第一次加载.bashrc文件时设置为DEFAULT_PS1的,而不是作为direnv钩子的一部分重新评估。
如何使用PS1更改direnv的值
发布于 2021-01-18 13:18:29
direnv wiki提到,作者必须“将PS1列为可以更改的环境变量”,主要是因为“核心问题是PS1是一个局部变量。”因此,我不认为使用.envrc文件间接修改PS1的解决方案是可行的。
我在python虚拟环境中遇到了类似的问题,我意识到这与您的用例不同,但是在这个博客中有一个示例可能会有所帮助。
因为链接会死,所以我在这里复制它:
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)'$PS1source ~/.bashrcwiki还提到将unset PS1添加到.envrc文件中,这将删除有关direnv: PS1 cannot be exported...的任何错误,我可以确认这也适用于此场景。
也许您可以做类似的事情;使用.envrc像您正在做的那样导出环境变量,但是删除行export CUSTOM_PS1='$(kube_ps1) $ ',在~/.bashrc中创建一个函数,检查是否设置了KUBE_PS1_ENABLED,如果设置了'$(kube_ps1) $ ',则将'$(kube_ps1) $ '附加到PS1中。
https://stackoverflow.com/questions/58487996
复制相似问题