export命令详解

  

基础命令学习目录首页html

 

export 的基本做用就是将父shell中的局部变量设置为环境变量,使得该变量能够在子shell中使用。下面设置两种情景对export进行原理解析。
情景
 1. 有一个名为myexport.sh的脚本,内容以下:
#!/bin/sh
export MY_PATH=/usr/local12
在linux环境中打开终端运行该shell
 
$sh myexport.sh
$echo $MY_PATH
$123
运行该shell后在终端没法看到该环境变量的值。
 - 在一个终端用export设置环境变量后再其余终端不可见。
缘由
  首先要提到进程,进程是一个运行着的程序,是代码的动态形式,进程有以下属性:

独立的内核堆栈
进程控制块
独立的存储空间

因为每一个进程有本身独立的存储空间,因此进程间的的数据是不可见的,进程间的交互须要用到进程间通讯。每个shell都是一个独立的进程,因此在一个进程内的操做一般不会影响到另外一个进程的内容,也不会被另外一个进程所看到。因此上面第二种情景中,不一样的终端开启了不一样的shell,这些终端是相互独立的进程,彼此不管如何设置环境变量,相互都是不可见的。(写入到系统配置文件中的环境变量那就是通讯了。)
export命令用于将父shell的局部变量全局化,这种全局化的意思就是让子shell可见。在父shell中执行一个子shell,会启动一个新的进行——子进程,故子shell便是一个独立于父shell的进程,父子shell的存储空间是相互不可见的(即子shell看不到父shell中的变量),若是想让子shell看到父shell的变量就须要将该变量从父shell的独立存储空间复制到子shell的独立存储空间,子shell看到的变量实际上是本身进程空间的内容,而不是父进程的内容,只不过这另个空间的变量的名称和值相同而已。故export并无采用什么高深的技术,只是将父进程空间的内容复制到子进程而已。
Linux中的父子进程是说父进程能够管理子进程,这种管理主要体如今三个方面:生、管、死,即父进程能够建立子进程,能够把上面export的例子算做一种管理吧,父进程死则子进程必须死,子进程死对父进程没有影响。其实除了生死以外,父子进程都是独立的进程。(父进程能够生子进程,为何不叫母进程呢?英文是 parent process,可不是 father process 。这个涉及到了历史和文化问题,不讨论了。)
结果
那么问题来了,如何将情景1中的myexport.sh中的环境变量导入到当前进程中来呢?首先说明,父进程能够将本身的环境变量写入到子进程的空间中,可是子进程没法将本身空间的数据写入到父进程中(至少export命令作不到)。那么想要让子shell中的变量在父shell可见,最好的办法就是不要成为子shell,即只将该shell的内容导入到”父“shell中,而不执行该shell。这样用到的导入命令是”.” 和 ”source“,这就相似于c语言中的”#include”,用法以下:
$. myexport.sh  # or $source myexport.sh
$echo $MY_PATH
/usr/local
---------------------
做者:如有所思HS
来源:CSDN
原文:https://blog.csdn.net/u012150792/article/details/50583972
版权声明:本文为博主原创文章,转载请附上博文连接!
 
 
经常使用用法
# 功能说明:设置或显示环境变量。
# export [-fnp][变量名称]=[变量设置值]
# 只在本次登陆中有效
# 再增长的路径用:追加
export PATH=$PATH:/home/jason001123456
 
说明
在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登录操做。
参数:
 
 -f  表明[变量名称]中为函数名称。
 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
 -p  列出全部的shell赋予程序的环境变量123
 
延伸
export设置环境变量是暂时的,只在本次登陆中有效,可修改以下文件来使命令长久有效。
 
1. 修改profile文件
#vi /etc/profile1
在里面加入:
 
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"1
这个在咱们的机器上是你们共用的,建议不修改这个,只修改本身根路径下的。
 
2. 修改本id根路径下的.bashrc或.bash_profile文件:
 
# vi /home/zhaodw/.bash_profile1
在里面加入:
 
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"1
注意: 一、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出; 二、一个shell中的系统环境变量才会被复制到子shell中(用export定义的变量); 三、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。 四、不用export定义的变量只对该shell有效,对子shell也是无效的。 --------------------- 做者:jason_cuijiahui 来源:CSDN 原文:https://blog.csdn.net/jason_cuijiahui/article/details/79408778 版权声明:本文为博主原创文章,转载请附上博文连接!
相关文章
相关标签/搜索