exec、source以及bash的区别
2011-12-06 15:58
351 查看
在bash shell中,source、exec以及sh都可以用来执行shell script,但是它们的差别在哪里呢?
sh:父进程会fork一个子进程,shell script在子进程中执行
source:在原进程中执行,不会fork子进程
exec:在原进程中执行,但是同时会终止原进程
注:使用export会把父进程中的变量向子进程中继承,但是反过来却不行,在子进程中,不管环境如果改变,均不会影响父进程
下面用一个例子来讲解
./1.sh fork
可以看到,1.sh是在父进程中执行,2.sh是在子进程中执行的,父进程的PID是5344,而子进程的是5345,当子进程执行完毕后,控制权返回到父进程。同时,在子进程改变环境变量A的值不会影响到父进程。
./1.sh source
由结果可知,1.sh和2.sh都是在同一进程中执行的,PID为5367
./1.sh exec
可知,两个脚本都是在同一进程中执行,但是请注意,使用exec终止了原来的父进程,因此,可以看到
由这个例子,便大致可了解它们的区别了
sh:父进程会fork一个子进程,shell script在子进程中执行
source:在原进程中执行,不会fork子进程
exec:在原进程中执行,但是同时会终止原进程
注:使用export会把父进程中的变量向子进程中继承,但是反过来却不行,在子进程中,不管环境如果改变,均不会影响父进程
下面用一个例子来讲解
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 CODE: #!/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是在父进程中执行,2.sh是在子进程中执行的,父进程的PID是5344,而子进程的是5345,当子进程执行完毕后,控制权返回到父进程。同时,在子进程改变环境变量A的值不会影响到父进程。
./1.sh source
由结果可知,1.sh和2.sh都是在同一进程中执行的,PID为5367
./1.sh exec
可知,两个脚本都是在同一进程中执行,但是请注意,使用exec终止了原来的父进程,因此,可以看到
echo "PID for 1.sh after exec/source/fork:$" echo "1.sh: \$A is $A"这两个命令没有执行
由这个例子,便大致可了解它们的区别了
相关文章推荐
- exec、source以及bash的区别
- exec、source以及bash的区别(zz)
- ./ source 以及 exec的区别
- [svc]彻底明白centos set&env bash&source&exec执行程序本质区别
- linux source bash ./ sh fork exec 的区别
- #!/bin/bash和#!/bin/sh的区别,source命令和exec命令
- linux shell中fork、source、exec的区别
- ubuntu下source、sh、bash、./执行脚本的区别
- linux的exec和source命令区别
- source、sh、bash、./执行脚本的区别
- [exec][source][fork]区别
- FlumeNG1.3.1在Source Exec tail 文件方面的一个缺陷以及改进方式
- Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
- ubuntu下source、sh、bash、./执行脚本的区别
- linux中source、bash命令区别
- ubuntu下source、sh、bash、./执行脚本的区别
- bash与source等特点和区别
- linux里source、sh、bash、./有什么区别(转)
- linux里source、sh、bash、./有什么区别
- exec和source的简单区别