主要以下有几种方式:

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脚本的三种方式的文章就介绍到这了,更多相关Shell调用另一个Shell脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式相关推荐

  1. 详解Ubuntu Server下启动/停止/重启MySQL数据库的三种方式(ubuntu 16.04)

    启动mysql: 方式一:sudo /etc/init.d/mysql start 方式二:sudo service mysql start 停止mysql: 方式一:sudo /etc/init.d ...

  2. 《 Python List列表全实例详解系列(二)》__创建列表(5种方式)

    < Python List列表全实例详解系列(二)> __创建列表(5种方式) 上一篇:< Python List 列表全实例详解系列(一)>__系列总目录.列表概念 本章目录 ...

  3. Tensorflow 2.x(keras)源码详解之第九章:模型训练和预测的三种方法(fittf.GradientTapetrain_steptf.data)

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  4. 【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 调用 evaluate 方法执行 Groovy 脚本 | 参数传递 )

    文章目录 一.Groovy 脚本中调用另外一个 Groovy 脚本 1.调用 evaluate 方法执行 Groovy 脚本 2.参数传递 二.完整代码示例 1.调用者 Groovy 脚本 2.被调用 ...

  5. linux shell脚本中调用另一个shell脚本

    先来说一下主要以下有几种方式: 1.fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. 2.exec: exec path/to/foo. ...

  6. 在 Shell 脚本中调用另一个 Shell 脚本的三种方式

    先来说一下主要以下有几种方式: fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. exec: exec path/to/foo.sh s ...

  7. linux shell命令行及脚本编程实例详解_超全整理!这些Shell编程必备知识你都掌握了吗?...

    正文最近很多粉丝咨询我,被问到了一些Shell编程的问题,看看大家能否答出来: 1.shell脚本千千万,不知道从哪入手 2.没经验缺方法,面试通不过.做事没头绪 3.野路子.没人教自动化,做了几年基 ...

  8. linux shell运行脚本,Linux shell脚本中调用另一个shell(exec、source、fork)

    在运行shell脚本时候,有三种方式来调用外部的脚本,exec(exec script.sh).source(source script.sh).fork(./script.sh) 1.exec(ex ...

  9. 【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 绑定作用域 binding 变量分析 | Binding 类 variables 成员分析 )

    文章目录 一.绑定作用域 binding 变量分析 二.Binding 类 variables 成员分析 三.完整代码示例 1.调用者 Groovy 脚本 2.被调用者 Groovy 脚本 3.执行结 ...

最新文章

  1. 如何锻炼自己的抗干扰能力
  2. 示波器触发模式及其使用
  3. 女神青涩时纤毫毕现!腾讯AI模型GFPGAN火上GitHub热榜第一,Demo在线可玩
  4. 201771010106东文财《面向对象程序设计(java)》实验12
  5. encoder decoder模型_如何突破Decoder性能瓶颈?揭秘FasterTransformer的原理与应用
  6. java登录界面_java实现登陆页面
  7. 阿里笔试题:求两个子序列的最大连续子序列
  8. 路遥《平凡的世界》读后感
  9. SPSS学习笔记:神经网络
  10. 电子商务的未来谁主宰?
  11. 机器学习实战(三)——决策树
  12. 百万互动出圈爆品复盘,小红书品牌如何高效打造爆品?
  13. 被骗进一个很隐蔽的外包公司,入职一个月才发现,已经有了社保记录,简历污了,以后面试有影响吗?...
  14. PS证件照(一):PS如何调整图片像素大小
  15. 张静君的“商脉通”和企业博客
  16. 关于串口数据处理(字符转换为十进制数值)
  17. 计数计量单位KMGTPEZY【计算机】【天文】
  18. 网络连接不上的一点问题
  19. C#面试时被人问你是如何优化你的代码的,该从哪些方面进行回答?
  20. [Python] 2018新税法下工资计算

热门文章

  1. python的property用法_Python的@property使用方法详解
  2. python抽学号程序_python:简单的学生管理系统
  3. 14c语言合并两个字符串,C语言的标识符和字符数据、字符串数据.ppt
  4. 计算机辅助设计cad综述,控制系统计算机辅助设计综述
  5. 无法启动因为计算机丢失ac1st16,重装系统后cad2006打不开.提示因为计算机中丢失ac1st16.dll...
  6. python大文件排序_Python 大文件排序
  7. ocr 超时小票识别_票总管-发票识别核验利器
  8. 没有足够的值_了解食物的GI值,让你的减脂效率翻倍
  9. java连接rabbitmq_Mac / Windows 下安装 RabbitMQ
  10. Linux 端口侦听不到,在linux上,如何在不尝试连接的情况下检查端口是否处于侦听状态...