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

    问题解决。

  • 相关阅读:
    vue2 v-model/v-text 中使用过滤器的方法示例
    HTML5游戏开发案例教程合集
    Docker实战案例视频课程
    Java项目框架架构与优化教程
    Linux云计算-虚拟化技术视频教程
    udl
    Chloe官网及基于NFine的后台源码毫无保留开放
    抽象类存在的意义和作用
    Shell 脚本语法
    Github 高级搜索功能
  • 原文地址:https://www.cnblogs.com/qiangxia/p/4623929.html
Copyright © 2011-2022 走看看