通过本文,简单的了解环境变量及其操作,与便于遇到相关问题时能够准确快捷的解决。

什么是环境变量

An environment variable is a dynamic-named value that can affect the way 
running processes will behave on a computer. --- wikipedia

转成中文大概就是 " 环境变量是一个动态命名的值,这个值能够影响计算机如何运行程序" ,接下来根据例子来理解可能会更好~

当用户在终端里输入某命令并敲下回车键的时候,计算机会在环境变量里指定的路径下查找这个命令对应的文件,并执行该文件以达到运行用户所需的程序,比如:

# 查看环境变量
echo $PATH # 进入指定的路径下
cd /usr/local/bin # 查看有哪些node相关的玩意
ls | grep "node"

效果如图:

打开文件夹,发现node是个可执行的文件,其实该文件里包含着node命令所应有内容:

当用户在终端执行node命令的时候,通过环境变量,系统将node命令指向该文件夹,并且执行该文件夹中对应的内容以启动node程序。

为了验证下,这里将node文件改个名,预测当node改名为node_test后,执行node_test命令则便是执行之前的node程序,下面是验证结果图:

# 修改node文件名为node_test
mv node node_test # 查看有哪些node相关的玩意,发现没有node,变成了node_test
ls | grep "node" # 执行node命令,提示没这命令
node # 执行node_test,发现和原先node效果一样,并且能写代码,还能查看版本,一切正常
node_test node_test -v

效果如图:

通过这么个简单的例子,大致能够知道什么是环境变量,也了解了环境变量是用来干什么的,接下来就看看如何去操作以及如何更好的管理环境变量。

配置环境变量

使用执行命令行进行配置

# 暴露个新变量 NEW_PATH
export NEW_PATH=/usr/lib # 我们可以通过 $NEW_PATH 变量名查看其值
echo $NEW_PATH # 将NEW_PATH追加到PATH变量后面,注意:用:符号分割路径
export PATH=$PATH:$NEW_PATH

效果如图所示:

结果显示ok,正确的追加到了$PATH后...

环境变量的临时修改还可以这么操作,但不推荐,这样的操作重写PATH所有内容:

eval PATH=xxx

效果如图:

基于上面方法添加的环境变量是临时的,重新打开个终端界面,一切都恢复如初~  那么想要让配置的环境变量是永久的该怎么处理呢?我们可以使用把要配置的环境变量写到对应的文件中,系统会在指定的时候执行对应的文件来读取用户配置的命令。

使用文件配置环境变量

Mac OS 默认环境变量的配置文件路径是 /etc/paths ,同时这个文件也是全局的环境变量文件,一般是只读权限的,需要用管理员账号来修改权限,然后写入对应的环境变量值,操作如下:

新开一个终端界面,输出$PATH,效果如图:

通过这样的修改,任何用户进来这台电脑都可以使用指定的全局环境变量(如:/etc/path_test)。

大多数时候不会使用上面的配置去更改全局环境变量,一般都是针对当前登录用户配置的环境变量,那么便应该操作 ~/.bash_profile

举个例子,在~/.bash_profile里加个环境变量

# 在 .bash_profile 里输入
exoprt TEST_PATH=/Users/yeshou
export PATH=$PATH:$TEST_PATH

效果如图:

Mac下的环境变量操作的小例子大致就这么跑了一遍,至此也大致了解环境变量及其操作流程。

最后,我们顺便看看 .bash* 相关都有什么文件:

cd ~
ls -a | grep “bash”

列出来的文件有:

.bash_history (记录bash命令操作的文件)

.bash_profile (系统在登录式操作时执行的环境变量配置文件,如启动系统、远程登录、切换用户)

.bash_sessions (bash会话记录,这是个文件夹,里面包含了每次使用bash所做的操作的文件列表)

.bashrc (系统在交互式和非登录式bash shell操作时读取执行的环境变量配置文件)

平常操作起来都是挺麻溜的,在整理成文章的时候还是会遇到不少问题,这也反映出平常大多停留在使用的阶段,没停下来去思考去理解… 通过写文章总结和整理知识点,会发现日常的理解或操作很多有不是那么合适的地方,发现后去改正,这样才会有进步~

理解及操作环境变量(基于Mac操作)的更多相关文章

  1. C# 获取当前文件、文件夹的路径及操作环境变量

    一.获取当前文件的路径 1.   System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName      获取模块的完整路径,包 ...

  2. django os.environ慎用setdefault操作环境变量!

    在绝大多数情况下,如果需要在程序运行过程中设置环境变量,使用os.environ.setdefault函数是没有任何问题的,但是有两种场景下setdefault会造成意外的问题,需要慎用: 如果程序执 ...

  3. java 环境变量配置 Mac

    大家在windows里面配置JDK环境变量很容易,但是如果要在mac里面配置JDK环境变量和windows里面有所不同,具体如下: 第一: mac OS里面自带jdk,不过是1.6的版本,现在很多人使 ...

  4. Qt安装后配置环境变量(Mac)

    打开终端需要打开配置文件(注意这里不是bash_profile而是 .bash_profile,我开始少了".") 如果bash_profile文件不存在,就会自动创建,然后需要输 ...

  5. cocos2dx 开发配置的一些环境变量(mac/linux)

    通常开发需要配置一些环境变量,下面把我电脑的部分配置分析一下. 1.android开发配置,ndk,sdk,ant 2.cocos2dx开发配置,cocos2d-x export COCOS2DX_R ...

  6. Mac下JDK、Maven、Tomcat、Git开发安装及环境变量配置

    本文主要内容: - 1.Mac OS 10.11.6 [OS X EL Captain] - 2.Mac OS 安装Java 设置环境变量 - 3.Mac OS 安装Maven设置环境变量 - 4.M ...

  7. mac系统mysql配置环境变量(转)

    mac初次安装mysql,输入mysql -u root -p会出现:zsh: command not found: mysql的提示.此时需要配置环境变量. mac版mysql客户端:mysql-5 ...

  8. Android 环境变量配置(Mac)

    Mac 系统10.10,自带的就是jdk1.6,因为工作需要就升级到了1.7,要从新配置环境变量了 mac 默认是自带的有jdk1.6 安装路径为: /System/Library/Framework ...

  9. mac下的环境变量

    a. /etc/profile b. /etc/paths c. ~/.bash_profile d. ~/.bash_login e. ~/.profile f. ~/.bashrc 其中a和b是系 ...

随机推荐

  1. SpringMVC的@RequestParam的解释

    自SpringMVC4.2之后,RequestParam内部有4个参数: 1.String name 2.String value 3.boolean required 4.String defaul ...

  2. asp.net core策略授权

    在<asp.net core认证与授权>中讲解了固定和自定义角色授权系统权限,其实我们还可以通过其他方式来授权,比如可以通过角色组,用户名,生日等,但这些主要取决于ClaimTypes,其 ...

  3. java使用字节流和字符流实现文件复制

    大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现. 那究竟该怎么做那,话不多说,直接上代码: 一,使用字节流复制文件 public class FileByteCopy ...

  4. git 介绍及其使用总结

      版本控制 Git                   目录  目录 2 第1章 Shell和vi 4 1.1 什么是shell 4 1.2 shell分类 4 1.3 认识bash这个shell ...

  5. distinct和group by 去掉重复数据分析

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp40 用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同) ...

  6. 利用MySQL触发器实现check和assertion

    MySQL虽然输入check语句不会报错,但是实际上并没有check的功能.但是MySQL 依然可以利用触发器来实现相应功能. 本文将根据两个例子简要阐述MySQL实现check和assertion的 ...

  7. MySQL (三)-- 字段属性、索引、关系、范式、逆规范化

    1 字段属性 主键.唯一键和自增长. 1.1 主键 主键:primary key,一张表中只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复. 一张表只能有最多一个主键. 1.1 ...

  8. python--购物车优化

    基本要求:用户入口1.商品信息存在文件里 2.已购商品.余额记录,长期保存, 即第一次启动是需要输入预算的,以后就拿剩下的钱买东西 商家入口 1.可以添加商品,删除商品,修改商品价格 2.按q可以退出 ...

  9. 集美大学网络1413第十二次作业成绩(个人作业3) -- Alpha阶段个人总结

    题目 个人作业3--个人总结(Alpha阶段) 优秀作业链接:**068 未交:**087 个人作业3成绩 学号 姓名 总结(4) 5个问题(2.5) 自我评价(2.5) 博客互动 (1) 总分(10 ...

  10. 201521123042 《java程序设计》 第八周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. ①泛型定义:泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展, ...