帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何使用Direnv在Linux中管理特定项目的环境变量

如何使用Direnv在Linux中管理特定项目的环境变量

发布时间:2020年07月11日 08:52:33    来源: A5互联

direnv是UNIX操作系统(如Linux和macOS)上shell的一个漂亮的开源扩展。它被编译成单个静态可执行文件,并支持shell,如bash、zsh、tcsh和fish。

direnv的主要目的是允许项目特定的环境变量,而不至于让~/.profile或相关的shell启动文件混乱不堪。它实现了一种根据当前目录加载和卸载环境变量的新方法。

它用于加载12-factor app(用于构建软件即服务应用程序的方法)环境变量,创建按项目隔离的开发环境,还加载用于部署的秘密。此外,它还可用于构建类似于rbenv,pyenv和phpenv的多版本安装和管理解决方案。

一、那么direnv如何工作?

在shell加载命令提示符之前,direnv检查.envrc当前文件(可以使用pwd命令显示)和父目录中是否存在文件。检查过程迅速,不会在每个提示上都注意到。

一旦找到.envrc具有适当权限的文件,便将其加载到bash子shell中,并捕获所有导出的变量并使它们可用于当前shell。

二、在Linux系统中安装direnv

在大多数Linux发行版中,可以使用系统软件包管理器从默认存储库安装direnv软件包,如下所示。

$ sudo apt install direnv#Debian,Ubuntu and Mint

$ sudo dnf install direnv#Fedora

在其他发行版(如Red Hat Enterprise Linux(RHEL)和CentOS)或任何支持快照的发行版上,您可以将其作为快照安装。这要求您已在系统上安装了snap。

$ sudo snap install direnv

三、如何将Direnv插入Bash Shell

安装direnv之后,您需要将其挂接到当前的Linux shell中。例如对于Bash,在~/.bashrc文件末尾添加以下行。

确保它甚至出现在rvm,git-prompt和其他操作提示的shell扩展之后。

eval "$(direnv hook bash)"

对于ZSH Shell

在~/.zshrc文件末尾添加以下行:

eval "$(direnv hook zsh)"

对于FISH Shell

在~/.config/fish/config.fish文件末尾添加以下行:

eval (direnv hook fish)

然后关闭活动的终端窗口并打开一个新的Shell或显示文件源,如图所示。

$ source ~/.bashrc

$ source ~/.zshrc

$ source ~/.config/fish/config.fish

四、如何在Linux Shell中使用direnv

为了演示direnv的工作方式,我们将创建一个新目录tecmint_projects,并将其移入该目录。

$ mkdir ~/tecmint_projects

$ cd tecmint_projects/

接下来,让我们TEST_VARIABLE在命令行上创建一个新变量,当它被回显时,该值应为空:

$ echo $TEST_VARIABLE

现在我们将创建一个新的.envrc文件,其中包含将被direnv加载的Bash代码。我们也尝试使用echo命令和输出重定向字符(>)在其中添加一行 "export the TEST_VARIABLE=tecmint"。

$ echo export TEST_VARIABLE=tecmint > .envrc

默认情况下,安全机制阻止.envrc文件的加载。由于我们知道它是一个安全文件,因此我们需要通过运行以下命令来批准其内容:

$ direnv allow .

现在.envrc已经允许加载文件的内容,让我们检查一下TEST_VARIABLE我们之前设置的值:

$ echo $TEST_VARIABLE

当我们退出tecmint_project目录时,direnv将被卸载,如果我们TEST_VARIABLE再次检查一次值,它应该为空:

$ cd ..

$ echo $TEST_VARIABLE

每次您移入tecmint_projects目录时,.envrc文件将被加载,如以下屏幕截图所示:

$ cd tecmint_projects/

要撤消给定的授权.envrc,请使用deny命令。

$ direnv deny .#in current directory

或者

$ direnv deny /path/to/.envrc

有关更多信息和使用说明,请参见direnv手册页:

$ man direnv

另外,direnv还使用stdlib(direnv-stdlib)附带的几个函数,这些函数使您可以轻松地将新目录添加到PATH中并执行更多操作。

要查找所有可用功能的文档,请查看direnv-stdlib手册页:

$ man direnv-stdlib