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 $ in
exec)
echo "using exec,,,,,"
exec ./.sh ;; #执行完成后结束
source)
echo "using source...."
. ./.sh ;; #执行完成后继续执行
*)
echo "using fork by default...."
./.sh ;; #另起一个进程来执行 .sh 执行后继续执行1.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"

修改文件权限:

 chmod  .sh
chmod .sh

测试代码:

$ ./.sh fork
$ ./.sh source
$ ./.sh exec

结果:

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

exec 和 source的区别的更多相关文章

  1. fork exec source的区别

    参考:http://www.cnblogs.com/bkygg/p/5023072.html 1:fork  运行的时候开一个sub_shell 执行调用的脚本,sub_shell执行的时候,pare ...

  2. linux下shell脚本执行方法及exec和source命令

    exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两 ...

  3. shell 中 exec 和 source 命令解析

    文章大部分来源于:http://www.cnblogs.com/zhaoyl/archive/2012/07/07/2580749.html 作为笔记留存博客备忘. exec和source都属于bas ...

  4. SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方 ...

  5. js正则表达test、exec和match的区别

    test的用法和exec一致,只不过返回值是 true false. 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用. 最近开发遇到一些 ...

  6. js正则表达式中test,exec,match方法的区别说明

    js正则表达式中test,exec,match方法的区别说明 test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var ...

  7. 【Sqlserver】SqlServer中EXEC 与 SP_EXECUTESQL的 区别

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方式的用法. 先建立一个表,并添加一些数据来进行演示: CREATE TABL ...

  8. 转转转---js正则表达exec与match的区别说明

    正则表达式对象有两个定义方式:: 1.第一种定义: new RegExp(pattern, attributes);如var reg = new RegExp("abc",&quo ...

  9. original和source的区别

    最近跟网页翻译怼上了,在给翻译前的页面起名是纠结于使用original page还是source page,就查了一下original和source的区别. original: n. 原件:原作:原物 ...

随机推荐

  1. IDE改为AHCI后系统无法启动的解决办法

    1.intel CPU 一.找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci,“Start”项值改为“0”. 二.重启,进入b ...

  2. 剑指Offer41 反转单词顺序,单词字符顺序不变

    /************************************************************************* > File Name: 41_Revers ...

  3. 【java.math.BigInteger】【转】常见问题

    好大的链接给原作 Q: 在java怎样将BigInteger类型的数据转成int类型的? A:BigInteger的intValue()可以获得int类型数值. Q: java.math.BigInt ...

  4. sgu 185 最短路建网络流

    题目:给出一个图,从图中找出两条最短路,使得边不重复. 分析:既然是最短路,那么,两条路径上的所有节点的入边(s,x).出边(x,e)必定是最优的,即 dis[x] = dis[s]+edge_dis ...

  5. Google Map Api 谷歌地图接口整理

    一:基本知识: 1. 使用谷歌地图 API 的第一步就是要注册一个 API 密钥,需要注重一下两点: 1.假如使用 API 的页面还没有发布,只是在本地调试,可以不用密钥,随便用个字符串代替就可以了. ...

  6. js 实现angylar.js view层和model层双绑定(改变view刷新 model,改变model自动刷新view)

    近段时间研究了下angular.js 觉得它内部实现的view和model层之间存在很微妙的关系,如下图 如上图说的,view的改变会update 数据层model, 数据层会update视图层vie ...

  7. backbone.Router History源码笔记

    Backbone.History和Backbone.Router history和router都是控制路由的,做一个单页应用,要控制前进后退,就可以用到他们了. History类用于监听URL的变化, ...

  8. 【CSS3】---last-of-type选择器+nth-last-of-type(n)选择器

    last-of-type选择器 “:last-of-type”选择器和“:first-of-type”选择器功能是一样的,不同的是他选择是父元素下的某个类型的最后一个子元素. 示例演示 通过“:las ...

  9. 【Quote】What is Mono

    What is Mono Mono is a software platform designed to allow developers to easily create cross platfor ...

  10. Android之开源项目优秀项目篇

    本文转自:http://www.trinea.cn/android/android-open-source-projects-excellent-project/ 记录的项目主要依据是项目有意思或项目 ...