自动将环境变量设置为等于另一个变量

自动将环境变量设置为等于另一个变量

我想创建一个环境变量,它是另一个环境变量的“别名”。即每当原始变量更改时,该别名变量也会随之更改。我如何以稳健的方式做到这一点?

对我来说确切的情况是这样的:我使用 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##*/}" "$@"

相关内容