zoukankan      html  css  js  c++  java
  • 用source命令执行脚本和用sh执行脚本之间的区别

    问题:

    有很多方式可以执行脚本,

    1)。source test.bsh

    2)。. test.bsh

    3)。chmod a+x test.bsh;./test.bsh

    4)。sh test.bsh

    它们之间的差别是什么?


    解决办法:

    1. source命令的作用是读取并执行test.bsh中的命令;

    该命令经常用点命令“.”来替代。

    就是说,

    # source test.bsh

    # . test.bsh

    的作用完全相同。

    2. 用脚本文件名本身执行(如果shell脚本具有可执行权限)和用sh命令执行脚本的作用完全相同。

    3. 用source命令执行脚本文件和用sh执行脚本文件的区别:

    用source执行脚本文件,执行过程不另开进程,脚本文件中设定的变量在当前shell中可以看到;

    用sh执行脚本文件,是在当前进程另开子进程来执行脚本命令,脚本文件中设定的变量在当前shell中不能看到。


    比如:

    test.bsh的内容如下:

    #!/bin/bash
    echo $$
    tstvar=12345

    以下是上面四种不同方式执行结果的差异:
    dingq@wd-u1110:~/wrk/tmp$ echo $$
    2375
    dingq@wd-u1110:~/wrk/tmp$ unset tstvar;source tst_sh.bsh;echo $tstvar
    2375
    12345
    dingq@wd-u1110:~/wrk/tmp$ unset tstvar;. tst_sh.bsh;echo $tstvar
    2375
    12345
    dingq@wd-u1110:~/wrk/tmp$ unset tstvar;./tst_sh.bsh;echo $tstvar
    5960
    
    dingq@wd-u1110:~/wrk/tmp$ unset tstvar;sh tst_sh.bsh;echo $tst_var
    5966
    
    dingq@wd-u1110:~/wrk/tmp$

    可以看到,当前进程ID为2375,用source和点命令(.)执行脚本时不改变当前进程,并且脚本中的变量可以看到;

    而直接执行脚本文件和使用sh执行脚本时改变了当前进程,并且脚本中的变量不能看到;


    问题解决。






  • 相关阅读:
    C# lock
    read appSettings in configuration file by XElement with xmlns
    get all sites under IIS
    Cross-site scripting(XSS)
    Do not throw System.Exception, System.SystemException, System.NullReferenceException, or System.IndexOutOfRangeException intentionally from your own source code
    C++ 算法
    C++ 数据结构概念
    C++ STL 常用算术和生成算法
    C++ STL 常用拷贝和替换算法
    C++ STL 常用排序算法
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218530.html
Copyright © 2011-2022 走看看