文档章节

linux shell 编程 9 脚本中调用脚本

QH_C
 QH_C
发布于 2015/11/11 22:50
字数 672
阅读 12
收藏 0


在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

1、fork 调用脚本

fork  ( /directory/script.sh)

fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.

运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。

sub-shell执行完毕后返回parent-shell. sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell

2、exec 调用脚本

exec (exec /directory/script.sh)

exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本.  被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别

3、source 调用脚本

source (source /directory/script.sh)

与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.

可以通过下面这两个脚本来体会三种调用方式的不同:

 

1、 脚本1 t1.sh

#!/bin/bash
A=B
echo "PID for 1.sh before exec/source/fork:$$"
# Environment variable
export A
# value of A is B
echo "1.sh: \$A is $A"
case $1 in
        exec)
                echo "using exec…"
                exec ./t2.sh ;;
        source)
                echo "using source…"
              source  ./t2.sh ;;
        *)
                echo "using fork by default…"
                ./t2.sh ;;
esac
echo "PID for 1.sh after exec/source/fork:$$"
echo "1.sh: \$A is $A"

2、 脚本2 t2.sh

#!/bin/bash
echo "PID for 2.sh: $$"
echo "2.sh get \$A=$A from 1.sh"
A=C
#Environment variable
export A
echo "2.sh: \$A is $A"

执行结果:

1、默认方式 fork, 在执行调用的 sh时 会新开一个 sub_shell而sub_shell 执行完parent_shell 会继续执行

[root@localhost  src]# sh t1.sh
PID for 1.sh before exec/source/fork:4221
1.sh: $A is B
using fork by default…
PID for 2.sh: 4222
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:4221
1.sh: $A is B

2、exec 执行结果  sub_shell 执行完后parent_shell J就不执行了

[root@localhost  src]# sh t1.sh exec
PID for 1.sh before exec/source/fork:4263
1.sh: $A is B
using exec…
PID for 2.sh: 4263
2.sh get $A=B from 1.sh
2.sh: $A is C

3、source  不会新开 sub_shell 来执行调用的脚本而是在同一个shell 中执行

[root@localhost  src]# sh t1.sh source
PID for 1.sh before exec/source/fork:4290
1.sh: $A is B
using source…
PID for 2.sh: 4290
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:4290
1.sh: $A is C




© 著作权归作者所有

共有 人打赏支持
QH_C
粉丝 1
博文 75
码字总数 69153
作品 0
朝阳
程序员
Shell脚本编程30分钟入门

什么是Shell脚本 示例 看个例子吧: #!/bin/shcd ~mkdir shell_tutcd shell_tut for ((i=0; i<10; i++)); do done 示例解释 第1行:指定脚本解释器,这里是用/bin/sh做解释器的 第2行:切换到...

quanpower
2014/03/23
0
0
Scala入门到精通——第三十节 Scala脚本编程与结束语

摘要: 本节主要内容 REPL命令行高级使用 使用Scala进行Linux脚本编程 结束语 1. REPL命令行高级使用 在使用REPL命令行时,有时候我们需要粘贴的代码比较大,而普通的粘贴可能会些一些问题,...

阿里云云栖社区
06/26
0
0
嵌入式Linux学习基础规划篇

嵌入式的学习是需要日积月累的,是通过一点一滴的积累才能成为大神。下面来介绍一下嵌入式linux学习基础规划,目标是达到适应嵌入式应用软件开发、嵌入式系统开发或嵌入式驱动开发的基本素质...

创客学院
04/10
0
0
shell编程 ---test

test命令用法。功能:检查文件和比较值 1)判断表达式 if test (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2 两个表达式都为真 test 表达式1 –o 表达式2 两个表达式有一个为...

mjrao
2013/12/23
0
0
Linux SHELL常用命令,你能想到的都在这

  小编友情提示:先收藏后阅读,满满都是干货   这里对Linux Shell中的一些常用命令进行介绍,注意不是linux 命令哦!废话不多说,接着看您就明白了,Come On。   break命令   break...

恒生开发者社区
2017/03/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
13
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部