最近在多个项目之间来回切换,其中不同项目需要使用同一个库的不同版本,来回切换太麻烦,于是乎,想到了曾经有同事给我建议的环境自动加载工具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