在Shell脚本中调用另一个脚本(3种方法)

准备:主脚本是second.sh,主脚本中调用first.sh

方法1:exec(1)执行方式:exec /home/weibo/shell_test/second.sh(2)特点:    1)运行主脚本时不会新开一个子shell来执行被调用脚本first.sh,被调用的脚本与主脚本在同一个Shell内执行,所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用。2)使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行
方法3:source(1)执行方式:source /home/weibo/shell_test/first.sh(2)特点:    1)同exec的特点1,即运行主脚本时不会新开一个子shell来执行被调用脚本first.sh,被调用的脚本与主脚本在同一个Shell内执行。2)使用source调用一个新脚本以后, 主脚本中exec行之后的内容还会执行

方法3:fork(1)执行方式:在主脚本中写所要调用脚本的路径,比如/home/weibo/shell_test/first.sh(2)特点:1)运行主脚本时会新开一个子shell来执行脚本first.sh;2)子shell执行的时候,父shell还在;3)子shell执行完毕后返回父shell,但是子shell中的环境变量不会带回父shell

主脚本second.sh

#!/bin/bash
#作者:魏波
#时间:2017.3.4A=100
echo "before exec/source/fork: PID for second.sh = $$"
export A
echo "In second.sh: variable second_variable=$A"
case $1 in--exec)echo -e "==>>> using exec start\n"exec /home/weibo/shell_test/first.sh ;;--source)echo -e "==>>> using source start\n". /home/weibo/shell_test/first.sh ;;--fork)echo -e "==>>> using fork start\n"/home/weibo/shell_test/first.sh ;;
esac
echo "after exec/source/fork: PID for second.sh = $$"
echo -e "In second.sh: variable second_variable=$A\n"

被调脚本first.sh

#!/bin/bash
#作者:魏波
#时间:2017.3.4echo "PID for first.sh = $$"
echo "In first.sh get variable second_variable=$A from second.sh"
A=200
export A
echo -e "In first_variable.sh: variable first_variable=$A\n"

注:这两个脚本中的参数 $$ 用于返回脚本的 PID , 也就是进程 ID。这个例子是想通过显示 PID 判断两个脚本是分开执行还是同一进程里执行,也就是是否有新开子 Shell。chmod +x first.sh second.sh 给两个脚本加上可执行权限后执行。

执行结果:

1、验证方法1:exec

2、 验证方法2:source

3、 验证方法3:fork

shell实例第19讲:一个脚本中调用另一个脚本的3种方法相关推荐

  1. linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式

    主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...

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

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

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

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

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

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

  5. 【linux】Shell脚本中调用另外一个脚本的方法

    在Linux平台上开发,经常会在console(控制台)上执行另外一个脚本文件,经常用的方法有:./my.sh 或 source my.sh 或 . my.sh:这三种方法有什么不同呢?我们先来了解一 ...

  6. linux fork脚本,在Shell脚本中调用另一个脚本的三种方式讲解

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

  7. 【Shell】Shell脚本中调用另一个脚本的三种方式(fork/exec/source)

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

  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. SWT 和 SWING
  2. MATLAB 数值数组和字符串转换
  3. 什么是ATM(异步传输模式)?—Vecloud微云
  4. ESP8266 Flash
  5. KubeVela安装
  6. mybatis-翻页
  7. 【Python】对象、类、元类
  8. 命令行cmd跳转到其他地址
  9. libusb的使用教程和例子
  10. html2canvas 像素,html2canvas 如何生成高清图片?
  11. KITTI激光雷达点云解析与图像反投影
  12. Mac下一款好用的UML图绘制工具(StarUML)
  13. HTML led字体包
  14. js拖拽(二)仿iGoogle自定义首页模块拖拽
  15. NGINX脚本语言原理及源码分析(三)
  16. Teamcenter Item
  17. iOS Xcode:No account for team 5P2U9V6DNN.
  18. 计算机内存条能装几个,4G内存条和2G内存条能不能装到一个电脑上?
  19. VSCode常见问题汇总(持续更新中)
  20. mac正常连wifi,无法解析域名

热门文章

  1. 终极版Python学习教程:一篇文章讲清楚Python虚拟环境
  2. activiti集成spring
  3. Python之创建tuple
  4. 利用Azure Backup备份和恢复虚拟机(2)
  5. Eclipse中使用git前账号密码等的配置问题
  6. 插入排序之——二分(折半)插入排序(c/c++)
  7. 想要自学深度学习?不用GPU,浏览器就够了
  8. Distinct Subsequences
  9. P3391 【模板】文艺平衡树(Splay)
  10. NetCore入门篇:(二)Net Core项目创建