浅谈export 以及环境变量

时间:2022-09-27 07:29:35

简要说一下env,set,export的区别:env命令显示环境变量,set和export显示环境变量和自定变量.

export:可以讲自定变量转化为环境变量之前有一个疑惑,我们定义环境变量PATH时习惯性的前面加一个export ,但是后来我测试不加export直接定义环境变量也会在export里面存在,经过查看资料研究才发现,系统的环境变量具有继承性,设置环境变量时不加export也会继承下去,但是自定变量就不一样了.必须前面加上export(或者declare -x  变量名)才具有继承性.具体原因如下:当你登入 Linux 并取得一个 bash 之后,你的 bash 就是一个独立的程序,这个程序的识别使用的是一个称为程序识别码,被称为 PID . 接下来你在这个 bash 底下所下达的任何指令都是由这个 bash 所衍生出来的,那些被下达的指令就被称为子程序了。 我们在原本的 bash 底下执行另一个 bash ,结果操作的环境介面会跑到第二个 bash 去(就是子程序), 那原本的 bash 就会在暂停的情况 (睡著了,就是 sleep)。若要回到原本的 bash 去, 就只有将第二个 bash 结束掉 (下达 exit 或 logout) 才行。
这个程序概念与变数有啥关系啊?关系可大了!因为子程序仅会继承父程序的环境变数, 子程序不会继承父程序的自订变数啦!所以你在原本 bash 的自订变数在进入了子程序后就会消失不见, 一直到你离开子程序并回到原本的父程序后,这个变数才会又出现!
换个角度来想,也就是说,如果我能将自订变数变成环境变数的话,那不就可以让该变数值继续存在于子程序了? 呵呵!没错!此时,那个 export 指令就很有用啦!那么如何将环境变量转化为自定变量呢declare +x  变量名即可 (其实export +变量 =declare -x 变量名)
具体例子如下 :自定变量 [root@qike ~]# a=b
[root@qike ~]# echo $a
b[root@qike ~]# export |grep  'a="b"'
[root@qike ~]# echo $?
1
[root@qike ~]# bash
[root@qike ~]# echo $a

[root@qike ~]# exit
exit
[root@qike ~]# export a=b[root@qike ~]# export |grep  'a="b"'
declare -x a="b"
[root@qike ~]# bash
[root@qike ~]# echo $a
b
----------------------------环境变量(考虑到实验公正性,须先将之前在/etc/profile等其他文件设置的变量注释掉)[root@qike ~]# PATH=$PATH:/home/work/mysql/bin/
[root@qike ~]# bash
[root@qike ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11495
Server version: 5.1.40-log MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye
[root@qike ~]# exit
exit[root@qike profile.d]# export |grep PATH
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/home/work/mysql/bin:/home/work/mysql/bin"
可以看到新增环境变量不用加export也可以  因为它本身就存在于export中,经过测试将declare + PATH 之后(前提是没有在/etc/profile和/etc/profile.d里面定义)将不会再具有继承性,退出终端重新登录后PATH自动恢复到环境变量的定义中无需再次更改回来.[root@qike ~]# PATH=$PATH:/home/work/mysql/bin/
[root@qike ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11492
Server version: 5.1.40-log MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye
[root@qike ~]# bash
[root@qike ~]# mysql
bash: mysql: command not found
[root@qike ~]#

浅谈export 以及环境变量的更多相关文章

  1. 浅谈Java语言环境搭建-JDK8

    title: 浅谈Java语言环境搭建-JDK8 blog: CSDN data: Java学习路线及视频 1.What's the JDK,JRE JDK(Java Development Kit ...

  2. linux命令 - export - 设置环境变量

    linux命令 - export - 设置环境变量 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供 ...

  3. 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释

    浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...

  4. 浅谈在ES5环境下实现const

    最近看到一个面试题--用ES5实现const.作为JS初学者的笔者知道在ES6中有const命令,可以用来声明常量,一旦声明,常量的值就不可改变.例如: 1234567891011 const Pi ...

  5. export 解决环境变量的问题!!!!

    export PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin" 如果/et ...

  6. readonly&&declare&&unset &&export&&env环境变量

    readonly命令用于定义只读shell变量和shell函数.readonly命令的选项-p可以输出显示系统中所有定义的只读变量. 选项 -f:定义只读函数: -a:定义只读数组变量: -p:显示系 ...

  7. Linux中export导入环境变量的几种方式

    1.首先类似于windows中的设定系统环境变量的方式为,在/etc/profile中 export PATH=$PATH:....:... 注意间隔符为: 然后复用原来路径是$PATH的方式 2.用 ...

  8. 浅谈JavaScript中的变量、参数、作用域和作用域链

    基本类型和引用类型 在JavaScript中有两种数据类型值.基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指的是可能由多个值构成的对象.在JavaScript中有5种基本数据类型 ...

  9. 浅谈JS执行环境及作用域

     今天刚刚开通博客,也是第一次写博文,略感紧张.作为一个表达能力弱弱的人来说,自己花三分钟理解一个知识点,当别人问起时,也许需要30分钟才只是让别人知道自己在说什么,一点也不夸张,希望在博客上可以练习 ...

随机推荐

  1. jQuery.Callbacks之demo

    jQuery.Callbacks是jquery在1.7版本之后加入的,是从1.6版中的_Deferred对象中抽离的,主要用来进行函数队列的add.remove.fire.lock等操作,并提供onc ...

  2. Java动态编程初探——Javassist

    最近需要通过配置生成代码,减少重复编码和维护成本.用到了一些动态的特性,和大家分享下心得. 我们常用到的动态特性主要是反射,在运行时查找对象属性.方法,修改作用域,通过方法名称调用方法等.在线的应用不 ...

  3. iOS iOS9.0 的CoreLocation定位

    一.简介 iOS9.0如果当前处于前台授权状态,默认是不可以后台获取用户位置. 如果在前台授权下,让其能获取到后台定位,该怎么办 可以设置以下属性为YES,就可以继续获取后台位置,但是会出现蓝条 使用 ...

  4. codeforces Hill Number 数位dp

    http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits:  5000 MS   Memory Limits: ...

  5. STM32 flash 内存分布介绍

    摘要: 本文以STM32F103RBT6为例介绍了片上Flash(Embedded Flash)若干问题,包括Flash大小(内存映射).块大小.页面大小.寄存器.这些知识,有利于写Flash驱动. ...

  6. SpringAop进行日志管理。

    在java开发中日志的管理有非常多种.我通常会使用过滤器,或者是Spring的拦截器进行日志的处理.假设是用过滤器比較简单,仅仅要对全部的.do提交进行拦截,然后获取action的提交路径就能够获取对 ...

  7. unity游戏设计之背包系统

    这次任务是模仿上图的样子,制作一个类似的背包系统. 上面的链接为:http://www.tasharen.com/ngui/exampleX.html 我们的目标是: 1.实现背包系统的UI界面 2. ...

  8. Node.js ZLIB

    Zlib 稳定性: 3 - 文档 可以通过以下方式访问这个模块: var zlib = require('zlib'); 这个模块提供了对 Gzip/Gunzip, Deflate/Inflate, ...

  9. MongoDB 和 NoSQL简介

    MongoDB 是一个基于分布式文件存储的数据库( https://www.mongodb.com/ ).由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案.MongoDB ...

  10. 使用nginx+tomcat将所有请求都转发到一个页面

    1.将页面放到tomcat的root目录下,即ROOT/weihu.html 2.修改nginx配置文件 server{ listen ; # nginx监听的端口 root /opt/apache- ...