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

    问题解决。

  • 相关阅读:
    开源ITIL管理软件iTop 2.5-2.6安装
    并发服务器
    套接字通信
    libevent
    gdb调试
    值得收藏的技术社区
    关于博客园随笔编辑页面内容不刷新(空白)的问题解决
    嵌入式Web框架
    内存地址的传递问题
    linux文件缓冲区
  • 原文地址:https://www.cnblogs.com/qiangxia/p/4623929.html
Copyright © 2020-2023  润新知