linux shell运行脚本,Linux shell脚本中调用另一个shell(exec、source、fork)
在运行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)相关推荐
- linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式
主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...
- linux shell脚本中调用另一个shell脚本
先来说一下主要以下有几种方式: 1.fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. 2.exec: exec path/to/foo. ...
- 在 Shell 脚本中调用另一个 Shell 脚本的三种方式
先来说一下主要以下有几种方式: fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. exec: exec path/to/foo.sh s ...
- shell脚本和python脚本和go脚本的区别_Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例-Go语言中文社区...
NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 1)标准输入.标准输出及标准错误输出的接口: child.stdin 获取标准输入 child.stdout 获取标准输出 chi ...
- shell脚本内调用另外一个shell脚本的几种方法
有时会在一个shell脚本(如test_call_other_shell.sh)中调用另外一个shell脚本(如parameter_usage.sh),这里总结几种可行的方法,这些方法在linux上和 ...
- 【linux】Shell脚本中调用另外一个脚本的方法
在Linux平台上开发,经常会在console(控制台)上执行另外一个脚本文件,经常用的方法有:./my.sh 或 source my.sh 或 . my.sh:这三种方法有什么不同呢?我们先来了解一 ...
- linux fork脚本,在Shell脚本中调用另一个脚本的三种方式讲解
先来说一下主要以下有几种方式: fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. exec: exec path/to/foo.sh s ...
- shell实例第19讲:一个脚本中调用另一个脚本的3种方法
在Shell脚本中调用另一个脚本(3种方法) 准备:主脚本是second.sh,主脚本中调用first.sh 方法1:exec(1)执行方式:exec /home/weibo/shell_test/s ...
- 【Shell】Shell脚本中调用另一个脚本的三种方式(fork/exec/source)
先来说一下主要以下有几种方式: (1)fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. (2)exec: exec path/to/fo ...
最新文章
- C语言函数指针(结构体函数指针)
- ExtJS 2.0官方实例目录
- 阿里云ECS开放批量创建实例接口,实现弹性资源的创建
- linux中央服务器,如何在Linux上搭建一个Git中央仓库
- telerik:RadTreeView树形菜单鼠标放上去展开菜单
- linux下安装微信,qq,企业微信,百度网盘,Foxmail等软件方法
- 中山纪念中学培训DAY1
- TransformerEncoder
- Elasticsearch 为什么能做到快速检索?秘密在这里!
- python和tableau优缺点_matplotlib和Tableau之间哪一个最好?
- 【国产MCU移植】看看有没有你需要的,一起来查漏补缺吧!(附已报名的硬件)...
- 【C++】使用cmake通过源代码安装第三方库
- 纪念数学家胡世华先生逝世20周年
- 3d Max修改器中英文对照表
- linux下隐藏文件 和 显示隐藏文件命令
- ts封装,H264和aac 封装成为ts,并生成m3u8
- APP从苹果开发者A账号转移到B账号的流程
- 2021 CCF基于UEBA的用户上网异常行为分析baseline线上0.90
- java使用freemark实现word(.doc/.docx)/pdf生成和导出(附源码和模板文件)
- 计算机考研815指什么,考研815化学包括什么
热门文章
- 华为机试HJ11:数字颠倒
- java web应用程序_说说Java Web中的Web应用程序|乐字节
- python输入y继续运行_Python二三事 - 接触Python(x,y)
- 十大“史上最佳”自动化测试工具
- linux 0.11 返回用户侧,iPhone 11 11 Pro 用户必备教程:重启手机,恢复模式,DFU模式...
- yum安装ruby_CentOS 7下配置Ruby语言开发环境的方法教程
- 剑指offer面试题[57]-删除链表中重复的结点
- python分析每月销售数据_利用Python进行某单品销售数据分析
- dc综合与pt静态时序分析(中文)_新能源汽车小三电系统(PDU/DC/OBC)技术研究详解...
- how to switch between python3.5 and python3.6