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

    from: http://blog.csdn.net/david_xtd/article/details/8012627

    问题:

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

    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执行脚本时改变了当前进程,并且脚本中的变量不能看到;

    问题解决。

  • 相关阅读:
    switch case加范围判断
    对requestAnimationFrame的一点理解
    用dos命令导出一个文件夹里面所有文件的名字(装逼利器)
    zookeeper基本知识入门(一)
    hadoop学习(七)----mapReduce原理以及操作过程
    centos虚拟机配置静态ip
    linux 配置ssh无密码登录不起作用的解决方案
    linux下安装开发环境
    hadoop学习(五)----HDFS的java操作
    hadoop学习(四)----windows环境下安装hadoop
  • 原文地址:https://www.cnblogs.com/qiangxia/p/4623929.html
Copyright © 2011-2022 走看看