direnv
是一个强大的环境变量管理工具,可以帮助我们简化环境变量管理。它可以根据当前目录自动加载或卸载环境变量,允许不同项目使用特定的环境变量。
项目地址:https://github.com/direnv/direnv/releases
direnv 安装
direnv
是基于 Go 语言开发,原生支持多平台,安装起来也是很简单的。
- 通过二进制版本安装
这里以 Linux
平台为例:
1 2 3
| $ wget -c https://github.com/direnv/direnv/releases/download/v2.20.0/direnv.linux-amd64 $ mv direnv.linux-amd64 direnv $ sudo mv direnv /usr/local/bin/
|
如果你使用的是其它平台,可在官方项目地址的 Releases 页面自行下载对应操作系统的文件。
- 配置以及集成 Shell
针对不同的 Shell 使用不同的 Hook 方式进行关联,这里我们说说最常用的两种 Bash 和 ZSH。
如果你使用的是 Bash,直接运行下面的命令即可。
1
| eval "$(direnv hook bash)"
|
如果你想长期使用 direnv
,可以将以上命令加入到 ~/.bashrc
文件中。
如果你使用的是 ZSH,直接运行下面的命令即可。
1
| eval "$(direnv hook zsh)"
|
同样,如果你需要长期使用 direnv
,可以将以上命令加入到 ~/.zshrc
文件中。
到这里,安装就算完成了,下面我们看看怎么使用吧。
direnv 使用
这里我们创建两个目录,分别叫 myenv1 和 myenv2,然后我们测试分别进入不同目录时自动切换环境变量。
- 在 myenv1 目录下创建一个
.envrc
文件,并设置了一个环境变量并打印欢迎消息,内容如下:
1 2 3 4 5 6
| $ vim .envrc #!/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
文件,并设置了一个环境变量并打印欢迎消息,内容如下:
1 2 3 4 5 6
| $ vim .envrc #!/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"
|
这里需要注意一下,在编辑文件保存退出时会提示下面的内容:
1
| direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
|
此时,我们需要使用下面命令使修改生效。
- 下面看看分别进入 myenv1 和 myenv2 目录时环境变量的变化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| # 进行 myenv1 目录 $ cd myenv1 direnv: loading .envrc ################################################## # Welcome to myenv1 # ################################################## direnv: export +myenv
$ env | grep myenv DIRENV_DIR=-/home/mike/test/myenv1 PWD=/home/mike/test/myenv1 myenv=myenv1
# 进行 myenv2 目录 $ cd myenv2 direnv: loading .envrc ################################################## # Welcome to myenv2 # ################################################## direnv: export +myenv
$ env | grep myenv DIRENV_DIR=-/home/mike/test/myenv2 PWD=/home/mike/test/myenv2 myenv=myenv2
|
至此,direnv
的基本功能就演示完了。但 direnv
的功能远不止这些,更多的高级功能如果你有兴趣可以自行发掘。
参考文档
- https://www.google.com
- https://www.cnblogs.com/rongfengliang/p/10730008.html
- https://www.jianshu.com/p/efbc215f65ef