浅谈export 以及环境变量
简要说一下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 以及环境变量的更多相关文章
- 浅谈Java语言环境搭建-JDK8
title: 浅谈Java语言环境搭建-JDK8 blog: CSDN data: Java学习路线及视频 1.What's the JDK,JRE JDK(Java Development Kit ...
- linux命令 - export - 设置环境变量
linux命令 - export - 设置环境变量 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供 ...
- 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释
浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...
- 浅谈在ES5环境下实现const
最近看到一个面试题--用ES5实现const.作为JS初学者的笔者知道在ES6中有const命令,可以用来声明常量,一旦声明,常量的值就不可改变.例如: 1234567891011 const Pi ...
- export 解决环境变量的问题!!!!
export PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin" 如果/et ...
- readonly&&declare&&unset &&export&&env环境变量
readonly命令用于定义只读shell变量和shell函数.readonly命令的选项-p可以输出显示系统中所有定义的只读变量. 选项 -f:定义只读函数: -a:定义只读数组变量: -p:显示系 ...
- Linux中export导入环境变量的几种方式
1.首先类似于windows中的设定系统环境变量的方式为,在/etc/profile中 export PATH=$PATH:....:... 注意间隔符为: 然后复用原来路径是$PATH的方式 2.用 ...
- 浅谈JavaScript中的变量、参数、作用域和作用域链
基本类型和引用类型 在JavaScript中有两种数据类型值.基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指的是可能由多个值构成的对象.在JavaScript中有5种基本数据类型 ...
- 浅谈JS执行环境及作用域
今天刚刚开通博客,也是第一次写博文,略感紧张.作为一个表达能力弱弱的人来说,自己花三分钟理解一个知识点,当别人问起时,也许需要30分钟才只是让别人知道自己在说什么,一点也不夸张,希望在博客上可以练习 ...
随机推荐
- 【原创】记一次Sql2008R2的数据库订阅发布遇到的问题!
1.首先新建一个空的数据库 CreditTest,里面没有任何表结构,视图,数据等. 2.在已连接的服务器的下方找到“复制”选项,然后兴建发布: ...(新建发布成功) ...(新建订阅成功) 3.问 ...
- 【C#进阶系列】09 关于参数的故事
可选参数和命名参数 不多说,上代码,自然懂 class Program { static void Main(string[] args) { var troy = new Troy(); troy. ...
- 那些教程没有的php3-命名空间
php.net (PHP 5 >= 5.3.0, PHP 7) 定义命名空间 虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和tra ...
- python爬虫——爬取NUS-WIDE数据库图片
实验室需要NUS-WIDE数据库中的原图,数据集的地址为http://lms.comp.nus.edu.sg/research/NUS-WIDE.htm 由于这个数据只给了每个图片的URL,所以需 ...
- Linux Shell系列教程之(十七) Shell文件包含
本文是Linux Shell系列教程的第(十七)篇,更多Linux Shell教程请看:Linux Shell系列教程 通过文件包含,可以引用其他文件的内容,也可以将复杂内容分开,使程序结构更加清晰. ...
- innerHtml and Jquery.html()
1. innerHtml是Dom HTML的属性 是只读的,不能写入. 2. JQuery只能调用.html(),它可以加参数,改变原HTML内容. http://api.jquery.com/htm ...
- JavaScript Array(数组)对象
一,定义数组 数组对象用来在单独的变量名中存储一系列的值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, elem ...
- RHEL7文件归档与压缩
本文介绍RHEL7.2文件的归档和压缩 文件归档 归档的好处:方便使用.查询.阅读,易于管理 (批量删除文件) 常用操作 命令:tar 作用:将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中 ...
- Get a developer license for windows store app
获取你的开发者许可证 开发人员许可证是免费.如果您通过使用微软账户获取一个或多个开发人员的许可证,您必须续订他们每隔 30 天 当您运行或调试应用程序第一次在远程机器上或直接连接到您的开发计算机的设 ...
- CSS3选择器(二)--表单
:enabled 选择可用状态的表单元素 :disabled 选择不可用状态的表单元素 :checked 复选框.单选框选中状态的选项 ::selection 用来匹配突出显示的文本(用鼠标选择文本时 ...