zoukankan      html  css  js  c++  java
  • 浅谈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 ~]#

  • 相关阅读:
    【HDOJ1534】【差分约束+SPFA】
    【HDOJ3861】【Tarjan缩点+最小路径覆盖】
    【二分图最大权完美匹配】【KM算法】【转】
    学习一点汇编 INT 16H指令
    POJ2449 Remmarguts' Date 第K短路
    POJ3090 巧用欧拉函数 phi(x)
    POJ3420 递推+矩阵快速幂
    UVALive 4671 K-neighbor substrings 巧用FFT
    Tyvj 1068 巧用扩展KMP
    第四周 Leetcode 124. Binary Tree Maximum Path Sum (HARD)
  • 原文地址:https://www.cnblogs.com/dantes91/p/4676968.html
Copyright © 2011-2022 走看看