子Shell及Shell嵌套模式

子Shell

概念

Shell子进程,Shell脚本是从上至下,从左至右依次执行每一行的命令及语句的,即执行完一个命令之后再执行下一个。如果在shell脚本中遇到子脚本(即脚本嵌套),就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句

子shell常见产生途径

由&产生的子Shell

【特点】

  1. 在Shell中使用"&"可以产生子Shell
  2. 由"&"产生的子Shell可以直接引用父Shell定义的本地变量
  3. 由"&"产生的子Shell中定义的变量不能被父Shell引用
  4. 在shell中使用"&"可以实现其他程序的多线程并发功能

由 管道 产生的子Shell

【特点】

  1. 在shell中使用管道可以产生子Shell
  2. 由管道产生的子Shell可以直接引用父Shell定义的本地变量
  3. 由管道产生的子Shell中定义的变量不能被父Shell引用
  4. 由管道产生的子shell不能异步执行,只能在执行完毕后才能返回到父Shell环境

由() 产生的子Shell

【特点】

  1. 在shell中使用()可以产生子Shell
  2. 由()产生的子Shell可以直接引用父Shell定义的本地变量
  3. 由()产生的子Shell中定义的变量不能被父Shell引用
  4. 由()产生的子shell不能异步执行,只能在执行完毕后才能返回到父Shell环境

由外部shell脚本产生的子Shell

【特点】

  1. 在shell中使用()可以产生子Shell
  2. 调用外部shell脚本产生的子Shell,可以直接引用父Shell定义的本地变量
  3. 调用外部shell脚本产生的子Shell中定义的变量(或者环境变量),不能被父Shell引用
  4. 调用外部shell脚本产生的子Shell不能异步执行,只能在执行完毕后才能返回到父Shell环境

Shell调用脚本模式

在主脚本中嵌套脚本的方式有很多,常见为fork,exec,source三种模式

fork模式调用脚本

fork模式是最普通的脚本调用方式,即直接在父脚本里面用"/script.sh"来调用脚本
SubShell可以从ParentShell继承环境变量,但是默认情况下SubShell中的环境变量不能带回ParentShell

exec模式调用脚本

exec模式不需要新开一个SubShell来执行被调用的脚本。被调用的脚本与父脚本在同一个Shell内执行,但是使用exec调用一个新脚本以后,父脚本中exec执行之后的脚本内容就不会再执行

source模式调用脚本

source模式,不会新开一个SubShell来执行被调用的脚本,而是在同一个Shell中执行,所以在被调用的脚本中声明的变量和环境变量都可以在主(父)脚本中获取和使用

source模式与exec模式相比,最大的不同在使用source调用一个新脚本以后,父脚本中source命令行之后的内容在子脚本执行完毕后依然会被执行

相关推荐
用户31187945592185 小时前
Kylin Linux 10 安装 glib2-devel-2.62.5-7.ky10.x86_64.rpm 方法(附安装包)
linux
涛啊涛6 小时前
Centos7非LVM根分区容量不足后扩容,对调硬盘挂载/
linux·磁盘管理
CYRUS_STUDIO1 天前
用 Frida 控制 Android 线程:kill 命令、挂起与恢复全解析
android·linux·逆向
熊猫李1 天前
rootfs-根文件系统详解
linux
dessler1 天前
Hadoop HDFS-高可用集群部署
linux·运维·hdfs
泽泽爱旅行1 天前
awk 语法解析-前端学习
linux·前端
轻松Ai享生活2 天前
5 节课深入学习Linux Cgroups
linux
christine-rr2 天前
linux常用命令(4)——压缩命令
linux·服务器·redis
三坛海会大神5552 天前
LVS与Keepalived详解(二)LVS负载均衡实现实操
linux·负载均衡·lvs
東雪蓮☆2 天前
深入理解 LVS-DR 模式与 Keepalived 高可用集群
linux·运维·服务器·lvs