[exec][source][fork]区别
2017-03-06 17:40
483 查看
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 ;; esac echo "PID for 1.sh after exec/source/fork:$$" echo "1.sh: \$A is $A"
2.sh
#!/bin/bash echo "PID for 2.sh: $$" echo "2.sh get \$A=$A from 1.sh" A=C export A sleep 1 echo "2.sh: \$A is $A"
试验开始
./1.sh fork
PID for 1.sh before exec/source/fork:25950 1.sh: $A is B using fork by default... PID for 2.sh: 25951 2.sh get $A=B from 1.sh 2.sh: $A is C PID for 1.sh after exec/source/fork:25950 1.sh: $A is B
./1.sh source
PID for 1.sh before exec/source/fork:25965 1.sh: $A is B using source... PID for 2.sh: 25965 2.sh get $A=B from 1.sh 2.sh: $A is C PID for 1.sh after exec/source/fork:25965 1.sh: $A is C
./1.sh exec
PID for 1.sh before exec/source/fork:25979 1.sh: $A is B using exec... PID for 2.sh: 25979 2.sh get $A=B from 1.sh 2.sh: $A is C
结论
fork使用sub-shell的方式执行子脚本, sub-shell会继承一些父脚本的环境变量且有自己的PID, 在sub-shell中修改这些环境变量不会影响父脚本source在不会开启sub-shell, 这种方式只是在父脚本的上下文执行子脚本中的语句, 在子脚本中修改环境变量会影响父脚本
exec与source类似, 唯一的不同是, 这种方式会终止父脚本的执行
相关文章推荐
- shell 脚本实战笔记(1)--source/fork/exec的区别
- fork source exec区别
- linux shell中fork、source、exec的区别
- linux中fork, source和exec的区别
- linux中fork, source和exec的区别
- linux source bash ./ sh fork exec 的区别
- fork source exec区别差异
- linux中fork, source和exec的区别
- fork exec source的区别
- fork source exec区别差异
- fork/source/exec的区别
- fork source exec区别差异
- fork source exec区别
- linux shell中fork、source、exec的区别
- fork source exec区别差异
- linux中的fork, source和exec的区别
- fork source exec区别差异
- *exec,source和fork的区别*
- 在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)
- exec和source的区别