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

相关推荐
cwywsx9 分钟前
Linux:进程控制2
linux·运维·算法
熙曦Sakura10 分钟前
【Linux网络】 HTTP cookie与session
linux·网络·http
南棱笑笑生14 分钟前
20250512给NanoPi NEO core开发板在Ubuntu core20.04系统下重新编译boot.img
linux·运维·ubuntu
Ha-gd27 分钟前
Linux基础开发工具一(yum/apt ,vim)
linux·服务器
charlie1145141911 小时前
内核深入学习3——分析ARM32和ARM64体系架构下的Linux内存区域示意图与页表的建立流程
linux·学习·架构·内存管理
Caron_xcb2 小时前
大数据——解决Matplotlib 字体不足问题(Linux\mac\windows)
大数据·linux·matplotlib
水水沝淼㵘2 小时前
嵌入式开发学习日志(数据结构--顺序结构单链表)Day19
linux·服务器·c语言·数据结构·学习·算法·排序算法
愚润求学2 小时前
【Linux】基础 IO(一)
linux·运维·服务器·开发语言·c++·笔记
大白的编程日记.3 小时前
【Linux学习笔记】理解一切皆文件实现原理和文件缓冲区
linux·笔记·学习
孞㐑¥3 小时前
Linux之进程控制
linux·开发语言·c++·经验分享·笔记