基础命令学习目录首页

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
注意:
1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;
2、一个shell中的系统环境变量才会被复制到子shell中(用export定义的变量);
3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。
4、不用export定义的变量只对该shell有效,对子shell也是无效的。
---------------------
作者:jason_cuijiahui
来源:CSDN
原文:https://blog.csdn.net/jason_cuijiahui/article/details/79408778
版权声明:本文为博主原创文章,转载请附上博文链接!

export命令详解的更多相关文章

  1. linux环境变量 export命令详解

    由host $ export DVSDK="${HOME}/ti-dvsdk_dm368-evm_xx_xx_xx_xx"引发的问题 1.${HOME}:首先, HOME 是个变量 ...

  2. Linux部分常用命令详解(二)

    date 命令详解 date命令可以按照指定格式显示日期,只键入date则以默认格式显示当前时间 例如: 如果需要以指定的格式显示日期,可以使用“+”开头的字符串指定其格式,详细格式如下: %n : ...

  3. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  4. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

  5. linux yum命令详解-转

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  6. 【转】linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  7. oracle中imp命令详解 .

    转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

  8. Linux Crontab 定时任务 命令详解

    一. Crontab 介绍 crontab命令的功能是在一定的时间间隔调度一些命令的执行. 1.1 /etc/crontab 文件 在/etc目录下有一个crontab文件,这里存放有系统运行的一些调 ...

  9. Linux命令详解之—pwd命令

    Linux的pwd命令也是一个非常常用的命令,本文为大家介绍下Linux中pwd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux pwd命令用于显示工作目录. 执行pwd指 ...

随机推荐

  1. Error: Couldn't find preset "env" relative to directory "/Users/user/ethereumjs-vm"

    运行npm run build时遇见这个问题,解决办法是安装: npm install --save-dev babel-preset-env 就解决了

  2. 范数 L1 L2

    在线性代数,函数分析等数学分支中,范数(Norm)是一个函数,是赋予某个向量空间(或矩阵)中的每个向量以长度或大小的函数.对于零向量,令其长度为零.直观的说,向量或矩阵的范数越大,则我们可以说这个向量 ...

  3. [原创]C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件

    C/C++语言中,如何在main.cpp中调用另一个.c文件主要有5种思路: 1.在VS2012 IDE中,将被引用的.c文件后缀名全部修改为.h,然后通过IDE的解决方案资源管理器中鼠标右键单击“头 ...

  4. 使用Charles进行移动APP抓包分析

    一.简介 Charles是目前最强大最流行的http抓包调试工具,Mac.Unix.Windows各个平台都支持.特别是做APP开发,调试与服务端的通信,Charles是必备工具. 目前Charles ...

  5. P2008 大朋友的数字

    题目描述 有一批大朋友(年龄15岁以上),他们每人手上拿着一个数字,当然这个数字只有1位,也就是0到9之间.每个大朋友的分数为在他之前的最长不下降子序列中所有数之和.(这个序列必须以它作为结尾!)如有 ...

  6. HashTable、HashSet和Dictionary的区别(转载)

    1.HashTable哈希表(HashTable)表示键/值对的集合.在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类 ...

  7. 【LeetCode3】Longest Substring Without Repeating Characters★★

    题目描述: 解题思路: 借用网上大神的思想:the basic idea is, keep a hashmap which stores the characters in string as key ...

  8. Tomcat出现需要输入账号和密码问题

    这里是端口冲突问题: 可以做一下几个解决方案: 第一:更好Tomcat/conf/server.xml文件里面的制定8080端口号,更改为你能记住的端口数: 第二:找到冲突的端口的进程,杀死这个进程, ...

  9. MySQL学习【第六篇sql语句下】

    一.select高级用法 1.传统连接(只能内连接,取交集,效率最慢) 1.根据两张表查询张三成绩 select t1.sname,t2.mark from t1,t2 where t1.sid=t2 ...

  10. 链接SQLServer数据库 导出csv文件

    依赖::::<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>ms ...