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中可以看到;
    用source命令可以在cd命令指定的文件夹中执行命令
    用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执行脚本时改变了当前进程,并且脚本中的变量不能看到;


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 using1174@foxmail.com

文章标题: source命令sh之间的区别

文章字数: 427

本文作者: Jun

发布时间: 2018-06-15, 11:23:00

最后更新: 2021-06-27, 21:55:55

原始链接: http://yoursite.com/2018/06/15/source命令sh之间的区别/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏