source命令sh之间的区别
问题:
有很多方式可以执行脚本
- source test.bsh
- test.bsh
- chmod a+x test.bsh;./test.bsh
- sh test.bsh
它们之间的差别是什么?
解决办法:
source命令的作用是读取并执行test.bsh中的命令;
该命令经常用点命令“.”来替代。
就是说,
#source test.bsh
与
#. test.bsh
的作用完全相同。用脚本文件名本身执行(如果shell脚本具有可执行权限)和用sh命令执行脚本的作用完全相同。
用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" 转载请保留原文链接及作者。