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

相关推荐
123过去1 小时前
ike-scan使用教程
linux·测试工具
疯狂吧小飞牛7 小时前
GPG基础指令
linux·服务器·网络
C++ 老炮儿的技术栈8 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
zhangfeng11338 小时前
Windows 的 Git Bash 中使用 md5sum 命令非常简单 md5做文件完整性检测 WinRAR 可以计算文件的 MD5 值
人工智能·windows·git·bash
todoitbo9 小时前
用虚拟局域网打通 Win/Mac/Linux 三端:跨设备协作的实用方案
linux·运维·macos
源远流长jerry9 小时前
RDMA 基本操作类型详解:从双端通信到单端直访
linux·网络·tcp/ip·ip
Sylvia-girl10 小时前
Linux下的基本指令1
linux·运维·服务器
wyt53142910 小时前
Redis的安装教程(Windows+Linux)【超详细】
linux·数据库·redis
17(无规则自律)10 小时前
【Linux驱动实战】:字符设备之ioctl与mutex全解析
linux·c语言·驱动开发·嵌入式硬件
天赐学c语言12 小时前
Linux - 应用层自定义协议与序列/反序列化
linux·服务器·网络·c++