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

相关推荐
wdfk_prog5 小时前
[Linux]学习笔记系列 -- [block]bfq-iosched
linux·笔记·学习
LCG元6 小时前
Linux 文本处理三剑客(grep, sed, awk)核心用法与实战
linux
RisunJan6 小时前
Linux命令-exportfs命令(管理NFS服务器上共享文件系统)
linux·运维·服务器
动感小麦兜6 小时前
服务器搭建
linux·服务器·python
LCG元6 小时前
效率翻倍!10个让你爱不释手的 Linux 命令行"神器"
linux
BS_Li7 小时前
【Linux系统编程】Ext系列文件系统
android·linux·ext系列文件系统
q***01777 小时前
Linux 下安装 Golang环境
linux·运维·golang
企鹅侠客7 小时前
Linux性能调优使用strace来分析文件系统的性能问题
linux·运维·服务器
奔跑吧邓邓子8 小时前
CentOS 7性能飞升秘籍:实战系统优化与调优
linux·运维·centos·实战·系统优化·性能调优
qinyia9 小时前
WisdomSSH如何高效检查服务器状态并生成运维报告
linux·运维·服务器·数据库·人工智能·后端·ssh