主要以下有几种方式:

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. Python 实现Windows开机运行某软件

    开机运行:随系统启动的应用程序,当系统启动之后会自动加载的应用 在注册表中添加启动项便可实现开机启动. 代码如下: # -*- coding:utf-8 -*- import win32api imp ...

  2. Java多线程-并发容器

    Java多线程-并发容器 在Java1.5之后,通过几个并发容器类来改进同步容器类,同步容器类是通过将容器的状态串行访问,从而实现它们的线程安全的,这样做会消弱了并发性,当多个线程并发的竞争容器锁的时 ...

  3. LVS集群之DR模式 实现

    ps:做 dr 模式 之前,先把之前做过的操作清空掉 1.ipvsadm -ln 查看规则 2.ipvsadm -C 清空规则 3.ipvsadm -ln 确认 4.iptables -t nat - ...

  4. Html中鼠标悬停显示二级菜单的两种方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. console命令详解

    Firebug是网页开发的利器,能够极大地提升工作效率. 但是,它不太容易上手.我曾经翻译过一篇<Firebug入门指南>,介绍了一些基本用法.今天,继续介绍它的高级用法. ======= ...

  6. R中,去掉dataframe中的NA行

    R中使用complete.cases 和 na.omit来去掉包含NA的行 现在有个一data.frame  datafile如下所示 Date        sulfate nitrate ID 1 ...

  7. 七种css方式让一个容器水平垂直居中

    阅读目录 方法一:position加margin 方法二: diaplay:table-cell 方法三:position加 transform 方法四:flex;align-items: cente ...

  8. C# 语音识别

    利用微软操作系统自动的语音识别功能,读取信息. 1.  在项目中添加  ""  引用 2.  引入命名空间:   using SpeechLib; 3.   读取的代码: Spee ...

  9. Python学习教程(learning Python)--2.3.5 Python返回多个值问题

    本节主要学习Python的函数是如何同时返回多个值的问题. 在学习Python的时候惊奇的发现,Python的函数可以同时返回多个值,很有意思. #define function sum def su ...

  10. POJ 3181 Dollar Dayz (完全背包,大数据运算)

    题意:给出两个数,n,m,问1~m中的数组成n,有多少种方法? 这题其实就相当于 UVA 674 Coin Change,求解一样 只不过数据很大,需要用到高精度运算... 后来还看了网上别人的解法, ...