面向移动和 Web 开发人员的开源后端服务器
direnv
是一个基于 golang
开发的简单而又强大的环境变量管理工具,其可以帮助我们简化环境变量的管理,同时还支持多种操作平台,包括 MacOS
、Ubuntu
、Fedora
等等。
1. 工具安装
推荐使用 docker 进行容器化部署
Direnv
是一个 Shell
程序的扩展,它可以帮助我们更好地使用现有的 Shell
程序,其会根据当前目录(进入对应目录中之后)加载和卸载我们指定的环境变量。使用它之后,可以帮助我们创建每个项目独立的开发环境,或者部署加载秘钥信息,等等。安装分为两部分:
# from binary builds
$ curl -sfL https://direnv.net/install.sh | bash
$ chmod +x direnv
$ mv direnv /usr/local/bin
# from system packages
$ apt install direnv
$ yum install direnv
# bash hook - ~/.bashrc
$ eval "$(direnv hook bash)"
# zsh hook - ~/.zshrc
$ eval "$(direnv hook zsh)"
# fish hook - ~/.config/fish/config.fish
$ direnv hook fish | source
# tcsh hook - ~/.cshrc
$ eval `direnv hook tcsh`
2. 工作原理
原来很简单,就是使用自定义的配置文件,完成的。
当进入目录对应目录之后,Direnv
会检查当前和父目录中是否存在 .envrc
或 .env
的文件。如果文件存在并且有权限访问的话,则会将其加载到 BASH
的 shell
中,然后通过 Direnv
捕获所有导出的变量,提供给当前 shell
使用。如果 .envrc
和 .env
文件同时存在的话,则将优先选择 .envrc
文件。
它支持像 Bash
、ZSH
、TCSH
和 FISH
这样的所有常见的 Shell
工具,允许项目特定的环境变量而不会对 〜/.profile
文件进行混乱。因为 Direnv
被编译成一个静态可执行文件,所以它足够快,在每个提示符上都不会被注意到。它也是语言无关的,可以用来构建类似于 rbenv
、pyenv
和 phpenv
的解决方案。
3. 快速使用
安装之后,如何开始使用呢?
# 创建一个演示目录
$ mkdir ~/my-project
$ cd ~/my-project
# 可以看到FOO变量没有被用到
$ echo ${FOO-nope}
nope
# 创建.envrc文件新加自动以变量 - 安全机制不允许加载
$ echo export FOO=foo > .envrc
.envrc is not allowed
# 去除安全机制再进行使用
$ direnv allow .
direnv: reloading
direnv: loading .envrc
direnv export: +FOO
# 显示FOO环境变量被加载
$ echo ${FOO-nope}
foo
# 退出项目目录
$ cd ..
direnv: unloading
# 之前设置的变量看不到了
$ echo ${FOO-nope}
nope
4. 参考链接
送人玫瑰,手有余香!