zoukankan      html  css  js  c++  java
  • [转]shell中 source命令即点空格后面再跟可执行文件的说明

    这里记录的是在一个shell脚本里面使用
    . ./file.sh 和
    ./file.sh 的区别,本文参考了http://www.lslnet.com/linux/dosc1/39/linux-283534.htm (这个蓝森林的东西应该是来源于chinaunix)


    来个小实验
    场景一:
    vi file1.sh
    ./file2.sh
    echo $NIVEK

    vi file2.sh
    NIVEK=goupi
    export NIVEK

    chmod 755 file1.sh file2.sh

    $./file1.sh
                      //没有任何输出
    $

    场景二:
    vi 1file.sh
    . ./2file.sh
    echo $NIVEK

    vi 2file.sh
    NIVEK=goupi
    export NIVEK

    chmod 755 1file.sh 2file.sh

    $./1file.sh
    goupi              //在2file.sh里面export 的变量NIVEK的值
    $

    由此可以看到它们的区别,即
    ./file.sh  将重启一个新的子shell来执行它,所以如果在file.sh中定义的一些变量(export)只在子shell有作用,返回后将失去作用.

    . ./file.sh 不启动新的shell,在当前shell中执行,所以在file.sh中定义的变量返回后依然有作用.


    再看一下这个简单的例子:
    cat 1.sh 
    #!/bin/bash
    sleep 1
    exit 1

    cat test1.sh 
    #!/bin/bash
    ./1.sh
    echo "can you see me"

    cat test2.sh 
    #!/bin/bash
    . ./1.sh
    echo "can you see me"

    分别执行test1.sh, test2.sh从它们的区别里面可以看到一些不同

    reference:

    http://blog.chinaunix.net/uid-20652643-id-1906458.html

  • 相关阅读:
    Map
    Enumeration输出
    iterator的基本用法
    Annotation整合工厂设计模式
    自定义Annotation
    Annotation
    动态代理设计模式
    静态代理设计模式
    自定义ClassLoader
    获取类的类对象的几种方式
  • 原文地址:https://www.cnblogs.com/galoishelley/p/4483850.html
Copyright © 2011-2022 走看看