zoukankan      html  css  js  c++  java
  • linux(一)export的生命周期

    本文从shell执行的角度分析export变量的生命周期

    # 只对当前shell环境起作用,比如通过不同的远程ssh就是不同的shell环境
    export k=v

    当运行一个.sh文件或者是shell命令,shell会把当前的环境变量都复制过来,也就是子类和父类的关系。通过以下几个场景解释这个概念。

    证明父能影响子

    1. 直接运行命令export K=V,然后echo $K,能看到输出了V
    2. 写一个shell脚本,echo $K,能看到输出了V

    证明子不能影响父

    1. 在一个shell脚本中export K=V,然后echo $K,能看到输出了V。
    2. 基于1,直接运行命令echo $K,发现输出为空

    如果想让shell脚本中执行的环境变量影响到父环境,那么可以用source来执行

    source xxx.sh

    因为source的脚本是在当前环境下执行的,也就是说没有用子shell来执行(默认用sh xxx.sh是新建一个子shell来运行)。这样就可以让脚本中更改的环境变量影响到系统环境变量。但也只是当前ssh连接下的环境变量,其他连接依然不受影响。如果要更改全局的环境变量,那么可以在/etc/profile中添加export xxxx,更改完后source /etc/profile

    如果想删除该变量,可以用unset xxxx

    总结

    1. Linux运行shell脚本是按类似继承的方式获取环境变量
    2. 如果想让运行的脚本在当前环境执行,则用source,注意:如果在脚本中又调用了其他脚本也遵循这个逻辑,即用source运行的其他脚本使用当前环境,sh运行的采用子环境
    3. 以上都是临时的,如果要重启机器不丢失变量则需要写入文件/etc/profile
  • 相关阅读:
    GUI学习笔记之一“Hello world”程序
    GDI和GUI的区别
    Convert.Int32、(int)和int.Parse三者的区别
    华为机试题汇总
    算法导论 第7章 课后习题
    算法导论 第8章 线性时间排序 课后习题
    算法导论 第21章 不相交集合的数据结构
    [转载]NIM(1) 一排石头的游戏
    算法导论 第22章 图论之拓扑排序
    编程珠玑第八章 算法设计艺术
  • 原文地址:https://www.cnblogs.com/ulysses-you/p/7728360.html
Copyright © 2011-2022 走看看