用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中可以看到;

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


问题解决。






转载于:https://www.cnblogs.com/java20130726/archive/2012/09/24/3218530.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值