原文:http://wiki.jikexueyuan.com/project/13-questions-of-shell/exec-source.html
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 ;;
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
echo "2.sh: \$A is $A"
执行结果:
- ./1.sh fork
- ./1.sh source
- ./1.sh exec