环境自动加载工具direnv

2019-03-04 16:20:04 浏览数 (1)

最近在多个项目之间来回切换,其中不同项目需要使用同一个库的不同版本,来回切换太麻烦,于是乎,想到了曾经有同事给我建议的环境自动加载工具direnv,可以使我在命令行中根据进入的目录不同,自动加载不同的环境配置。下面就看看怎么使用吧。

下载安装

可以从 https://github.com/direnv/direnv 下载自己操作系统的包。

代码语言:javascript复制
$ wget -c https://github.com/direnv/direnv/releases/download/v2.19.1/direnv.linux-amd64
$ mv direnv.linux-amd64 direnv
$ sudo mv direnv /usr/local/bin/

针对不同的shell使用不同的hook,这里我使用的是bash,所以运行下面的命令。

代码语言:javascript复制
$ eval "$(direnv hook bash)"

到这里,就算安装完成了,下面看看怎么使用吧。

使用

这里我们创建两个目录,分别叫 myenv1 和 myenv2,然后我们测试分别进入不同目录时自动切换环境。

在 myenv1 目录下创建 .envrc 文件,其中设置了一个环境变量并打印欢迎消息,内容如下:

代码语言:javascript复制
#!/bin/bash

export myenv=myenv1
echo -e "e[1;34m##################################################e[0m"
echo -e "e[1;34m#               Welcome to $myenv                #e[0m"
echo -e "e[1;34m##################################################e[0m"

在 myenv2 目录下创建 .envrc 文件,其中设置了一个环境变量并打印欢迎消息,内容如下:

代码语言:javascript复制
#!/bin/bash

export myenv=myenv2
echo -e "e[1;34m##################################################e[0m"
echo -e "e[1;34m#               Welcome to $myenv                #e[0m"
echo -e "e[1;34m##################################################e[0m"

这里注意一下,在编辑文件保存退出时会提示下面的内容

代码语言:javascript复制
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.

此时,我们需要使用下面命令使修改生效。

代码语言:javascript复制
direnv allow

下面看看分别进入 myenv1 和 myenv2 目录时环境的变化。

代码语言:javascript复制
[kongxx@bdmaster test]$ cd myenv1
direnv: loading .envrc
##################################################
#               Welcome to myenv1                #
##################################################
direnv: export  myenv
[kongxx@bdmaster myenv1]$ env | grep myenv
DIRENV_DIR=-/home/kongxx/test/myenv1
PWD=/home/kongxx/test/myenv1
myenv=myenv1

[kongxx@bdmaster test]$ cd myenv2
direnv: loading .envrc
##################################################
#               Welcome to myenv2                #
##################################################
direnv: export  myenv
[kongxx@bdmaster myenv2]$ env | grep myenv
DIRENV_DIR=-/home/kongxx/test/myenv2
PWD=/home/kongxx/test/myenv2
myenv=myenv2

0 人点赞