gpt4 book ai didi

direnv - 无法用 direnv 覆盖 PS1

转载 作者:行者123 更新时间:2023-12-05 03:57:27 25 4
gpt4 key购买 nike

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

.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

我已使用 direnv allow 允许最新版本的 .envrc。然而,当切换到目录时,自定义的 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 中的解决方案应该如何工作,显然当 .bashrc 文件第一次加载时 PS1 的值被设置为 DEFAULT_PS1 而不是重新加载- 作为 direnv Hook 的一部分进行评估。

如何使用 direnv 更改 PS1 的值?

最佳答案

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

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

因为链接可能会失效,所以我在这里复制它:

  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 无法导出... 我可以确认这也适用于这种情况。

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

关于direnv - 无法用 direnv 覆盖 PS1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58487996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com