公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

direnv 是一个强大的环境变量管理工具,可以帮助我们简化环境变量管理。它可以根据当前目录自动加载或卸载环境变量,允许不同项目使用特定的环境变量。

项目地址:https://direnv.net/

direnv 安装

direnv 是基于 Go 语言开发,原生支持多平台,安装起来也是很简单的。

  1. 通过二进制版本安装

这里以 Linux 平台为例:

$ 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 页面自行下载对应操作系统的文件。

  1. 配置以及集成 Shell

针对不同的 Shell 使用不同的 Hook 方式进行关联,这里我们说说最常用的两种 Bash 和 ZSH。

  • Bash

如果你使用的是 Bash,直接运行下面的命令即可。

eval "$(direnv hook bash)"

如果你想长期使用 direnv,可以将以上命令加入到 ~/.bashrc 文件中。

  • ZSH

如果你使用的是 ZSH,直接运行下面的命令即可。

eval "$(direnv hook zsh)"

同样,如果你需要长期使用 direnv,可以将以上命令加入到 ~/.zshrc 文件中。

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

direnv 使用

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

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

$ 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"
  1. 同样也在 myenv2 目录下创建一个 .envrc 文件,并设置了一个环境变量并打印欢迎消息,内容如下:

$ 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"

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

direnv: error .envrc is blocked. Run `direnv allow` to approve its content.

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

$ direnv allow
  1. 下面看看分别进入 myenv1 和 myenv2 目录时环境变量的变化。

# 进行 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 的功能远不止这些,更多的高级功能如果你有兴趣可以自行发掘。

参考文档

  1. https://www.google.com

  2. https://www.cnblogs.com/rongfengliang/p/10730008.html

  3. https://www.jianshu.com/p/efbc215f65ef

你可能还喜欢

点击下方图片即可阅读

你不可错过的 GitHub 万星技术面试宝典

点击上方图片,打开小程序,加入「玩转 Linux」圈子

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

还在为多环境下项目管理的问题困扰吗,用上 direnv 后工作轻松乐无忧!相关推荐

  1. 在linux环境下com.aspose.words将word文件转为pdf后乱码,window环境下不会

    在linux环境下com.aspose.words将word文件转为pdf后乱码,window环境下不会 乱码原因是因为在linux系统下没有中文字体,所以转换的时候乱码,需要我们手动把window系 ...

  2. 并发环境下的缓存容器性能优化(上):不可变的哈希表

    我们在项目中经常会遇到这样的场景:一些信息读取开销较大,但只需要生成一次便可反复使用,因此我们会将其永久地缓存起来.例如在ASP.NET MVC中,系统会根据Controller的名称来缓存对应的元数 ...

  3. 在linux环境下 com.aspose.words将word文件转图片后乱码,window系统正常

    乱码原因是因为在linux系统下没有中文字体,所以转换的时候乱码,需要我们手动把window系统的字体文件拷贝到linux系统下的字体目录下. 解决方法如下: (1)window系统的字体目录位置C: ...

  4. Windows7环境下用VirtualBox (5.1)上安装Ubuntu 17.10

    VirtualBox下载地址如下: https://www.virtualbox.org/wiki/Downloads Ubuntu各个版本镜像下载地址如下: http://mirrors.melbo ...

  5. 北航计算机测试控制智能车,“车路协同环境下车辆群体智能控制理论与测试验证”项目顺利通过科技部中期检查...

    2020年11月25日,科技部高技术研究发展中心"综合交通运输与智能交通"重点专项管理办公室组织专家在北京完成了对我校牵头的"车路协同环境下车辆群体智能控制理论与测试验证 ...

  6. nacos怎么修改服务分组_Nacos(六):多环境下如何“管理”及“隔离”配置和服务...

    前言 前景回顾: 现如今,在微服务体系中,一个系统往往被拆分为多个服务,每个服务都有自己的配置文件,然后每个系统往往还会准备开发环境.测试环境.正式环境 我们来说算一算,假设某系统有10个微服务,那么 ...

  7. ICCV2019语义分割/UDA:ACE: Adapting to Changing Environments for Semantic SegmentationACE:适应变化环境下的语义分割

    ACE: Adapting to Changing Environments for Semantic Segmentation ACE:适应变化环境下的语义分割 0.摘要 1.概述 2.相关工作 2 ...

  8. 如何在Linux环境下用虚拟机跑Windows!

    文章目录 #0x0 Windows #0x1 安装虚拟机 #0x10 下载: #0x11 安装: #0x2 安装虚拟机windows #0x20 下载镜像 #0x21 安装镜像 #0x3 使用Wind ...

  9. 详解vue项目和普通项目如何解决开发环境与生产环境下的跨域问题

    概念: 什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制.所谓同源是指,域名,协议,端口均相同. http://www ...

最新文章

  1. 操作系统--内存管理方式
  2. 物联网激荡MEMS传感器浪潮
  3. echart参数设置——曲线图
  4. 1.13 复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan
  5. sort函数——利用函数实现快速排序c++
  6. my appointment Fiori customizing里的Calendar checkbox的实现逻辑
  7. get方法请求返回一个文件_一键转换多种文件格式,完全免费,总有一个方法适合你...
  8. python 写入文件编码_使用Python写入文本文件时的编码问题
  9. cc1 transform链
  10. 技术总结之SpringIOC
  11. 人体存在感应雷达技术,车内生命体征检测,毫米波雷达探测模块
  12. 卡巴斯基离线病毒库升级办法
  13. 调戏木马病毒的正确姿势——上
  14. php 字符串压缩,PHP 压缩字符串的几种方法
  15. 银河麒麟安装Redis 6.0.3
  16. 泊松回归模型matlab,matlab拟合泊松分布
  17. onenote打开闪退平板_oppo r11s安装Onenote后打开会闪退怎么弄?
  18. linux dkms,DKMS简介
  19. 介绍一款rar文件密码破解利器——RAR Password Unlocker
  20. 麒麟安全IPO过会:拟募资6.6亿 第一季营收下降40%

热门文章

  1. lodop指定打印机打印_LODOP指定window默认打印机和临时默认打印机
  2. 中兴新支点操作系统信创全栈国产化解决方案
  3. crazy的比较级最高级_英语小问题:crazy比较级是crazier还是more crazy?
  4. Mac的uTorrent在Catalina不能用——替代品transmission/qBittorrent安装和使用方法
  5. 波峰焊 php,选择性波峰焊焊与普通波峰焊的区别
  6. Metasploit工具学习(二)
  7. h5 先加载小图_交互基础:加载的10种类型和应用场景分析
  8. 北京大学信科2017机试之鸡蛋的硬度
  9. 简述配置php运行环境的大致步骤,简述手工安装、配置PHP运行环境的大致步骤。...
  10. 本地对弈五子棋(以命名管道进行通信)