前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell编程,脚本执行方式知多少?

shell编程,脚本执行方式知多少?

作者头像
软测小生
发布2019-07-05 12:58:29
3600
发布2019-07-05 12:58:29
举报
文章被收录于专栏:软测小生
shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别是fork、source和exec

1. fork

即通过sh 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 建father.sh,内容如下:

代码语言:javascript
复制
#!/bin/bash

echo "父shell进程开始执行"
sh son.sh #父shell fork子shell环境执行另一个脚本
echo "父shell进程执行完毕"

创建son.sh,内容如下:

代码语言:javascript
复制
#!/bin/bash

echo "子shell被调用"

执行sh father.sh:

代码语言:javascript
复制
[@sjs_59_152 ccztest]# sh father.sh 
父shell进程开始执行
子shell被调用
父shell进程执行完毕

通过以上例子,可以知道fork的特性为: 在一个脚本中调用另一个脚本,被调用脚本执行完成之后返回给父shell进程,父shell进程继续执行剩下的指令

2. source

即通过source或. 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下:

代码语言:javascript
复制
#!/bin/bash

source son.sh  #通过source方式将son.sh加载到当前shell环境中

echo "father访问son中定义的局部变量:$sonVar"

创建son.sh,内容如下:

代码语言:javascript
复制
#!/bin/bash

sonVar="son var"
echo "son定义了一个变量:sonVar=$sonVar"

执行sh father.sh:

代码语言:javascript
复制
[@sjs_59_152 ccztest]# sh father.sh 
son定义了一个变量:sonVar=son var
father访问son中定义的局部变量:son var

通过以上例子,可以知道source的特性为: source调用,是把被调用脚本加载到当前的shell环境中来执行,就好像是在一个脚本里面运行一样,他们的定义的局部变量共享

3. exec

即通过exec 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下:

代码语言:javascript
复制
#!/bin/bash

echo "父shell开始执行"
exec sh son.sh
echo "父shell完成执行,但是这句话不会被执行"

创建son.sh,内容如下:

代码语言:javascript
复制
#!/bin/bash

echo "子shell被父shell exec调用,执行权已经被抢占过来了,不会在交回给父shell进程"

执行sh father.sh:

代码语言:javascript
复制
[@sjs_59_152 ccztest]# sh father.sh 
父shell开始执行
子shell被父shell exec调用,执行权已经被抢占过来了,不会在交回给父shell进程

通过以上例子,可以知道exec的特性为: exec调用,也是fork一个子shell环境来执行被调用脚本,但是父shell环境的执行权会被剥夺,也就是执行权被交给了被调用脚本,父shell环境不再拥有执行权,无论父shell脚本中的指令是否执行完成,都不在被执行,随着子shell进程的结束而结束。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软测小生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. fork
  • 2. source
  • 3. exec
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档