linux export的作用域
最近好友提问export作用域相关的问题~被问到了,写篇文章记录一下。
前言
Linux export 命令用于设置或显示环境变量。
提示:以下是本篇文章正文内容,下面案例可供参考
一、问题详情
现在是可以echo的
现在写一个脚本测试
wq 保存为 test.sh
直接运行脚本是ok的可以输出~~~
现在我再直接echo $a
不行是空的
那么怎么可以让他在外面也可以生效呢?
二、分析原因
1.百度定义
搜索到,在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。
我们执行脚本,其实是一个新的进程在执行,他设置的环境变量,并不能影响当前进程,也就是变量的作用域不一样。
2.如何实现
知道问题了,我们就很好解决了。
当运行一个.sh文件或者是shell命令,shell会把当前的环境变量都复制过来,也就是子类和父类的关系。通过以下几个场景解释这个概念。
证明父能影响子
直接运行命令export K=V,然后echo $K,能看到输出了V
写一个shell脚本,echo $K,能看到输出了V
证明子不能影响父
在一个shell脚本中export K=V,然后echo $K,能看到输出了V。
基于1,直接运行命令echo $K,发现输出为空
我们可以
source test.sh
原理就是source 命令 可以重新加载.bash_profile 和 .profile目录的命令。
我们使用source 是在本进程执行的,所以 $a的作用域是相符的,我们就可以echo出 $a。
3.linux的相关目录介绍
系统级:
1、/etc/profile
在系统启动后第一个用户登录时运行,并从/etc/profile.d目录的配置文件中搜集shell的设置,使用该文件配置的环境变量将应用于登录到系统的每一个用户。
2、/etc/bashrc(Ubuntu和Debian中是/etc/bash.bashrc)
在 bash shell 打开时运行,修改该文件配置的环境变量将会影响所有用户使用的bash shell。
3、/etc/environment
在系统启动时运行,用于配置与系统运行相关但与用户无关的环境变量,修改该文件配置的环境变量将影响全局。
用户级:
1、~/.profile(推荐首选)
当用户登录时执行,每个用户都可以使用该文件来配置专属于自己使用的shell信息。
2、~/.bashrc
当用户登录时以及每次打开新的shell时该文件都将被读取,不推荐在这里配置用户专用的环境变量,因为每开一个shell,该文件
都会被读取一次,效率肯定受影响。
4、~/.bash_logout
当每次退出系统(退出bash shell)时执行该文件。
总结
麻烦来个一键三连!!!!!