博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux(一)export的生命周期
阅读量:6270 次
发布时间:2019-06-22

本文共 775 字,大约阅读时间需要 2 分钟。

本文从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

转载于:https://www.cnblogs.com/ulysses-you/p/7728360.html

你可能感兴趣的文章
怎么用secureCRT连接Linux
查看>>
C# 使用WinRar命令压缩和解压缩
查看>>
linux学习笔记一----------文件相关操作
查看>>
Mono for Android 优势与劣势
查看>>
服务器端开发技术
查看>>
Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
查看>>
ajax提交多个对象,使用序列化表单和FormData
查看>>
深入分析由前序和中序重构二叉树问题
查看>>
leetcode 题解 || Valid Parentheses 问题
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
什么是WeakHashMap--转
查看>>
js 面试题
查看>>
第二十二节,三元运算
查看>>
Yacc 与 Lex 快速入门
查看>>
Unity中HDR外发光的使用
查看>>
Flume负载均衡配置
查看>>
Ajax详解
查看>>
Ubuntu C/C++开发环境的安装和配置
查看>>
百世汇通快递地区选择插件,单独剥离
查看>>
Linux系统调用---同步IO: sync、fsync与fdatasync【转】
查看>>