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
成都联想代理www.lenovocd.com【公司名称】成都鸿盛广达科技有限公司
【代理级别】成都联想服务器总代理
【销售经理】成都鸿盛广达科技有限公司
【联系方式】座机:028-85952921 手机:13981931555
【公司地址】成都市武侯区人民南路四段一号时代数码广场A座17楼