主要以下有几种方式:

Command Explanation
fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 Shell。
exec 在同一个 Shell 内执行,但是父脚本中 exec 行之后的内容就不会再执行了
source 在同一个 Shell 中执行,在被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用,相当于合并两个脚本在执行。
 

第一种:fork 特点:会生成子PID而且可重复被调用。

  ♦fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用

  ♦foo.sh 这个脚本,比如如果是 foo.sh 在当前目录下,就是 ./foo.sh。运行的时候 terminal 会新开一个子 Shell 执行脚本 foo.sh,子 Shell 执行的时候, 父 Shell 还在。子 Shell 执行完毕后返回父 Shell。 子 Shell 从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回父 Shell。

1.进入 编辑:

 [root@localhost ~]# vim liqiang-2.sh

2.编辑内容调用写法:

echo 在这里调用
./liqiang.sh

3.输出结果

[root@localhost ~]# ./liqiang-2.sh
在这里调用
hollo
hollo

第二种:exec 特点:exec调用一次之后的所有代码都不执行

  ♦exec 与 fork 不同,不需要新开一个子 Shell 来执行被调用的脚本. 被调用的脚本与父脚本在同一个 Shell 内执行。但是使用 exec 调用一个新脚本以后, 父脚本中 exec 行之后的内容就不会再执行了。这是 exec 和 source 的区别.

1.编辑内容调用写法:

echo 在这里调用
./liqiang.sh
echo 这里是exec函数调用
exec ./liqiang-3.sh
echo 这里是source
source liqiang-4.sh
echo 在这里调用
./liqiang.sh
echo 这里是exec函数调用
exce liqiang-3.sh
echo 这里是source
source liqiang-4.sh
echo 在这里调用
./liqiang.sh
echo 这里是exec函数调用
exce liqiang-3.sh
echo 这里是source
source liqiang-4.sh

2.输出结果:特点在于执行了第一个exec之后下面的就再也不执行了。

[root@localhost ~]# ./liqiang-2.sh
在这里调用
hollo
hollo
这里是exec函数调用
看看这里调用几次
调用一次就对了

第三种:sourcesource特点不会生成子PID也就是子进程,他就行把被用的脚本拷贝到当前shell脚本中执行,可以重复被调用。

  ♦与 fork 的区别是不新开一个子 Shell 来执行被调用的脚本,而是在同一个 Shell 中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用。

1.编辑内容调用写法:

echo 在这里调用
./liqiang.sh
echo 这里是exec函数调用这次被注释掉了
#exec ./liqiang-3.sh
echo 这里是source
source liqiang-4.sh
echo 在这里调用
./liqiang.sh
echo 这里是exec函数调用被注释掉了
#exce liqiang-3.sh
echo 这里是source
source liqiang-4.sh
echo 在这里调用
./liqiang.sh
echo 这里是exec函数调用
exec liqiang-3.sh
echo 这里是source
source liqiang-4.sh 

♦2.执行结果:

[root@localhost ~]# ./liqiang-2.sh
在这里调用
hollo
hollo
这里是exec函数调用这次被注释掉了
这里是source
看看这里调用几次
没有限制就对了
在这里调用
hollo
hollo
这里是exec函数调用被注释掉了
这里是source
看看这里调用几次
没有限制就对了
在这里调用
hollo
hollo
这里是exec函数调用#之后的没被调用了

注意:

  ♦source方式的结果是两者在同一进程里运行。该方式相当于把两个脚本先合并再运行。

  ♦给多个脚本赋权限

chmod a+x liqiang-2.sh liqiang-3.sh liqiang-4.sh

Shell 脚本中调用另一个 Shell 脚本的三种方式的更多相关文章

  1. 在一个JSP页面中包含另一个JSP页面的三种方式

    转载自://http://blog.163.com/neu_lxb/blog/static/179417010201121343132918/ (1)include指令          includ ...

  2. shell脚本中执行另一个shell脚本

    分类: 可以在一个shell脚本中执行另一个shell脚本(或非可执行文件,主要用于取得一些变量的值),方法是: . 文件名(包括路径) 或 变量=文件名(包括路径) . $变量   注意,圆点后面有 ...

  3. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

  4. shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

    fork ( /directory/script.sh) fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本. 运行的时候开一个sub- ...

  5. 在ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...

  6. Windows10-UWP中设备序列显示不同XAML的三种方式[3]

    阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...

  7. ASP.NET MVC2中Controller向View传递数据的三种方式

    转自:http://www.cnblogs.com/zhuqil/archive/2010/08/03/Passing-Data-from-Controllers-to-View.html 在Asp. ...

  8. Linux/Unix shell 脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

  9. 只能从脚本中调用在类定义上有[ScriptService]属性的Web服务问题的解决方案

    ajax调用webservice中的接口时, 会出现[只能从脚本中调用在类定义上有[ScriptService]属性的...]的异常. 这是因为, 在.net3.5中, 访问web服务, 要对web服 ...

随机推荐

  1. 有意思的记录-Java

    1.文件读取 项目外的绝对路径或相对路径文件读取 String path = "/xx/xx.txt"; BufferedReader reader = new BufferedR ...

  2. Editplus配置VC++(2) 与/d1reportSingleClassLayout

    前篇文章:Editplus配置VC++(1) 及相关注意事项 VC++有两个隐含编译选项/d1reportSingleClassLayout和/d1reportAllClassLayout   /d1 ...

  3. Zookeeper 的学习与运用

    引子 云计算越来越流行的今天,单一机器处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,这些信息如何推送到各个节点? ...

  4. arduino编程语言Wiring参考手册API

    对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(based on Processing)来实现的. 通过编程,Arduino可以实现很多种功能. ...

  5. TF-IDF

    TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或 ...

  6. docker ui

    docker run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-doc ...

  7. Construct a tree from Inorder and Level order traversals

    Given inorder and level-order traversals of a Binary Tree, construct the Binary Tree. Following is a ...

  8. Android学习(未完)

    Android四大组件1.Activity活动活动Activity是一种可以包含用户界面的组件,主要用于和用户进行交互活动之间使用intent进行通信,激活组件,分为1.显式intent2.隐式int ...

  9. Eclipse 分屏显示同一个文件

    场景 : 某个类很大,可能有数千行.当你想要将类开头部分与中间或者靠后的部分进行对比时,请follow如下步骤: Window -> Editor -> Toggle Split Edit ...

  10. ArcGis实现添加MultiLayerMarkerSymbol(多个符号叠加生成新的符号)

    , , );             pMarkerSymbol.Angle = ;             pMarkerSymbol.XOffset = ;;;;, , );            ...