子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命令行之后的内容在子脚本执行完毕后依然会被执行

相关推荐
琥珀色糖13 小时前
Linux守护进程
linux·终端·守护进程·会话·进程组
开心大爆炸17 小时前
xrdp 连接 登录对话框输入密码后闪退
linux·运维·服务器
oushaojun217 小时前
大厂 C++ 面试:深度剖析 Linux Signal 信号机制(转)
linux
苏生Susheng18 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
Ruiery18 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
分支预测失败18 小时前
RISC-V AIA 中断架构实战:从 PLIC 到 APLIC 与 IMSIC 的迁移
linux·后端
GeW18 小时前
RHCE学习拿证计划:锁定核心考点,实现备考效率最大化
linux
snow@li19 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
苏生Susheng19 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
额额额对了19 小时前
Linux 进程间通信(IPC)核心机制:消息队列、共享内存与信号量详解
linux·网络·网络协议