我想创建一个环境变量,它是另一个环境变量的“别名”。即每当原始变量更改时,该别名变量也会随之更改。我如何以稳健的方式做到这一点?
对我来说确切的情况是这样的:我使用 conda 环境,它使用一个环境变量,CONDA_DEFAULT_ENV
当你改变环境时,它会改变。我希望有一个环境变量可以在任何更改时VIRTUAL_ENV
进行设置和更新。CONDA_DEFAULT_ENV
请注意,我在 MacOS 上使用 zsh。
答案1
环境变量的值是一个字符串。没有什么比这更奇特的了。没有办法让程序自动查看另一个变量:没有像文件符号链接这样的环境变量。
Zsh 有一些非常有限的工具来自定义更改变量的效果,但它们在这里不会为您提供帮助。 (你必须用 C 语言编写一个自定义模块。)无论如何,只有在 zsh 中分配变量时它们才会起作用。
您可以做的是在使用CONDA_DEFAULT_ENV
.我建议您通常不要设置CONDA_DEFAULT_ENV
,如果未设置,请让包装器脚本设置它。
/usr/bin
将此脚本放在您的之前的目录中$PATH
,例如~/bin/conda-wrapper
。在您想要环绕的命令名称下创建指向脚本的符号链接,例如ln -s conda-wrapper ~/bin/conda
.然后conda foo
将设置CONDA_DEFAULT_ENV
并运行/usr/bin/conda foo
。
#!/bin/sh
if [ -z "$CONDA_DEFAULT_ENV" ] && [ -n "$VIRTUAL_ENV" ]; then
export CONDA_DEFAULT_ENV="$VIRTUAL_ENV"
fi
exec "/usr/bin/${0##*/}" "$@"