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

1、exec(exec /home/script.sh):

使用exec来调用脚本,被执行的脚本会继承当前shell的环境变量。但事实上exec产生了新的进程,他会把主shell的进程资源占用并替换脚本内容,继承了原主shell的PID号,即原主shell剩下的内容不会执行。

2、source(source /home/script.sh)

使用source或者“.”来调用外部脚本,不会产生新的进程,继承当前shell环境变量,而且被调用的脚本运行结束后,它拥有的环境变量和声明变量会被当前shell保留,类似将调用脚本的内容复制过来直接执行。执行完毕后原主shell继续运行。

3、fork(/home/script.sh)

直接运行脚本,会以当前shell为父进程,产生新的进程,并且继承主脚本的环境变量和声明变量。执行完毕后,主脚本不会保留其环境变量和声明变量。

总结:这样来看fork最灵活,source次之,exec最诡异。

主脚本:1 #!/bin/sh

2 a=main

3

4 echo "a is $a"

5 echo "PID for parent before 2.sh:$$"

6 case $1 in

7   exec)

8     echo "using exec"

9     exec ./2.sh ;;

10   source)

11     echo "using sourcing"

12     source ./2.sh ;;

13   *)

14     echo "using fork"

15     ./2.sh ;;

16

17 esac

18

19 echo "PID FOR parent after 2.sh :$$"

20

21 echo "now main.sh a is $a"

22 echo "$b"

调用脚本:2.sh1 #!/bin/sh

2 echo "PID FOR 2.SH:$$"

3

4 echo  "2.sh get a from main.sh is $a"

5

6 a=2.sh

7 export a

8 b=3.sh

9

10 echo "now 2.sh a is $a"

~

~

执行结果:[root@lvs2 home]# ./main.sh exec

a is main

PID for parent before 2.sh:19026

using exec

PID FOR 2.SH:19026

2.sh get a from main.sh is main

now a is 2.sh

[root@lvs2 home]# ./main.sh source

a is main

PID for parent before 2.sh:19027

using sourcing

PID FOR 2.SH:19027

2.sh get a from main.sh is main

now a is 2.sh

PID FOR parent after 2.sh :19027

now main.sh a is 2.sh

3.sh

[root@lvs2 home]# ./main.sh fork

a is main

PID for parent before 2.sh:19028

using fork

PID FOR 2.SH:19029

2.sh get a from main.sh is main

now a is 2.sh

PID FOR parent after 2.sh :19028

now main.sh a is main

[root@lvs2 home]#

linux shell运行脚本,Linux shell脚本中调用另一个shell(exec、source、fork)相关推荐

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

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

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

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

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

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

  4. shell脚本和python脚本和go脚本的区别_Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例-Go语言中文社区...

    NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 1)标准输入.标准输出及标准错误输出的接口: child.stdin 获取标准输入 child.stdout 获取标准输出 chi ...

  5. shell脚本内调用另外一个shell脚本的几种方法

    有时会在一个shell脚本(如test_call_other_shell.sh)中调用另外一个shell脚本(如parameter_usage.sh),这里总结几种可行的方法,这些方法在linux上和 ...

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

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

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

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

  8. shell实例第19讲:一个脚本中调用另一个脚本的3种方法

    在Shell脚本中调用另一个脚本(3种方法) 准备:主脚本是second.sh,主脚本中调用first.sh 方法1:exec(1)执行方式:exec /home/weibo/shell_test/s ...

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

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

最新文章

  1. C语言函数指针(结构体函数指针)
  2. ExtJS 2.0官方实例目录
  3. 阿里云ECS开放批量创建实例接口,实现弹性资源的创建
  4. linux中央服务器,如何在Linux上搭建一个Git中央仓库
  5. telerik:RadTreeView树形菜单鼠标放上去展开菜单
  6. linux下安装微信,qq,企业微信,百度网盘,Foxmail等软件方法
  7. 中山纪念中学培训DAY1
  8. TransformerEncoder
  9. Elasticsearch 为什么能做到快速检索?秘密在这里!
  10. python和tableau优缺点_matplotlib和Tableau之间哪一个最好?
  11. 【国产MCU移植】看看有没有你需要的,一起来查漏补缺吧!(附已报名的硬件)...
  12. 【C++】使用cmake通过源代码安装第三方库
  13. 纪念数学家胡世华先生逝世20周年
  14. 3d Max修改器中英文对照表
  15. linux下隐藏文件 和 显示隐藏文件命令
  16. ts封装,H264和aac 封装成为ts,并生成m3u8
  17. APP从苹果开发者A账号转移到B账号的流程
  18. 2021 CCF基于UEBA的用户上网异常行为分析baseline线上0.90
  19. java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)
  20. 计算机考研815指什么,考研815化学包括什么

热门文章

  1. 华为机试HJ11:数字颠倒
  2. java web应用程序_说说Java Web中的Web应用程序|乐字节
  3. python输入y继续运行_Python二三事 - 接触Python(x,y)
  4. 十大“史上最佳”自动化测试工具
  5. linux 0.11 返回用户侧,iPhone 11 11 Pro 用户必备教程:重启手机,恢复模式,DFU模式...
  6. yum安装ruby_CentOS 7下配置Ruby语言开发环境的方法教程
  7. 剑指offer面试题[57]-删除链表中重复的结点
  8. python分析每月销售数据_利用Python进行某单品销售数据分析
  9. dc综合与pt静态时序分析(中文)_新能源汽车小三电系统(PDU/DC/OBC)技术研究详解...
  10. how to switch between python3.5 and python3.6