exec 和 source的区别

source 就是让 script 在当前 shell 内执行、而不是产生一个 sub-shell 来执行。由
exec 也是让 script 在同一个行程上执行,但是原有行程则被结束了。

 source ./my.script
 或: . ./my.script
 也就是简而言之:原有行程会否终止,就是 exec 与 source/fork 的最大差异了。

代码1.sh

#!/bin/bash
A=B
echo "PID FOR 1.sh before exec/source/fork:$$"
export A
echo "1.sh:\$A is $A"
case $1 in
        exec)
                echo "using exec,,,,,"
                exec ./2.sh ;;  #执行完成后结束
        source)
                echo "using source...."
                . ./2.sh ;;  #执行完成后继续执行
        *)
                echo "using fork by default...."
                ./2.sh ;;  #另起一个进程来执行 2.sh 执行后继续执行1.sh
esac

echo "PID FOR 1.sh after exec/source/fork :$$"
echo "1.sh:\$A is $A"

 

代码 2.sh

1 #!/bin/bash
2 echo "PID for 2.sh:$$"
3 echo "2.sh get \$A=$A from 1.sh"
4 A=C
5 export A
6 echo "2.sh: \$A is $A"
View Code

修改文件权限:

1 chmod 744 1.sh
2 chmod 744 2.sh

 

测试代码:

$ ./1.sh fork 
$ ./1.sh source
$ ./1.sh exec
View Code

结果:

# ./1.sh exec
PID FOR 1.sh before exec/source/fork:24394
1.sh:$A is B
using exec,,,,,
PID for 2.sh:24394
2.sh get $A=B from 1.sh
2.sh: $A is C

# ./1.sh source
PID FOR 1.sh before exec/source/fork:24441
1.sh:$A is B
using source....
PID for 2.sh:24441
2.sh get $A=B from 1.sh
2.sh: $A is C
PID FOR 1.sh after exec/source/fork :24441
1.sh:$A is C

# ./1.sh fork
PID FOR 1.sh before exec/source/fork:24472
1.sh:$A is B
using fork by default....
PID for 2.sh:24473
2.sh get $A=B from 1.sh
2.sh: $A is C
PID FOR 1.sh after exec/source/fork :24472
1.sh:$A is B

 

转载于:https://www.cnblogs.com/NullPoint/p/3561028.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值