zoukankan      html  css  js  c++  java
  • linux shell 结构 与source 命令

    Linux Shell&环境变量

          登录到系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行 shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创 建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。   
          在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了 一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,它的子shell不能引用它,要使某个变量的值可以在它的子shell中被 改变,可以使用export命令对已定义的变量进行输出。export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。
    例子
    编写一个C程序,这个C程序需要动态链接一个用户编写的动态库。一切编译好之后,运行可执行文件,会发现系统提示无法找到动态链接库。好的,你发现原来没有将这个动态库的路径加入到LD_LIBRARY_PATH中。但是,加好之后,系统仍然提示无法找到动态库。这是什么缘故呢?当用export LD_LIBRARY_PATH命令后,再运行可执行文件,成功了!由此推测,linux shell在运行可执行程序的时候,也会产生一个子shell。
     
    Source命令
        source命令执行一个脚本时,不会产生一个子shell,而是在当前的shell环境中运行。比如您在一个脚本里export $KKK=111 ,假如您用./a.sh执行该脚本,执行完毕后,您运行 echo $KKK ,发现没有值,假如您用source来执行 ,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是 source不同他就是在本shell中执行的,所以能够看到结果。
  • 相关阅读:
    JS jQuery显示隐藏div的几种方法
    PHP 二维数组去重(保留指定键值的同时去除重复的项)
    Java面试题解析(一)
    Java :面向对象
    使用 Spring Framework 时常犯的十大错误
    Spring Boot 面试的十个问题
    《深入理解 Java 内存模型》读书笔记
    Spring Boot 2.0 迁移指南
    MaidSafe区块链项目白皮书解读
    20190712共学问题归纳
  • 原文地址:https://www.cnblogs.com/linghuaichong/p/4283425.html
Copyright © 2011-2022 走看看