首页 > 学院 > 开发设计 > 正文

exec和source的区别

2019-11-14 17:50:21
字体:
来源:转载
供稿:网友

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

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

代码1.sh

#!/bin/bashA=Becho "PID FOR 1.sh before exec/source/fork:$$"export Aecho "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.shesacecho "PID FOR 1.sh after exec/source/fork :$$"echo "1.sh:/$A is $A"

 

代码 2.sh

1 #!/bin/bash2 echo "PID for 2.sh:$$"3 echo "2.sh get /$A=$A from 1.sh"4 A=C5 export A6 echo "2.sh: /$A is $A"
View Code

修改文件权限:

1 chmod 744 1.sh2 chmod 744 2.sh

 

测试代码:

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

结果:

# ./1.sh execPID FOR 1.sh before exec/source/fork:243941.sh:$A is Busing exec,,,,,PID for 2.sh:243942.sh get $A=B from 1.sh2.sh: $A is C# ./1.sh sourcePID FOR 1.sh before exec/source/fork:244411.sh:$A is Busing source....PID for 2.sh:244412.sh get $A=B from 1.sh2.sh: $A is CPID FOR 1.sh after exec/source/fork :244411.sh:$A is C# ./1.sh forkPID FOR 1.sh before exec/source/fork:244721.sh:$A is Busing fork by default....PID for 2.sh:244732.sh get $A=B from 1.sh2.sh: $A is CPID FOR 1.sh after exec/source/fork :244721.sh:$A is B

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表