Linux 父子Shell

声明:所有文章只作为学习笔记用,转载非原创
终端;https://blog.csdn.net/zyboy2000/article/details/88100843

https://www.cnblogs.com/lqynkdcwy/p/9350144.html

重点看看:子shell 嵌套模式

https://blog.csdn.net/zhou16333/article/details/83796907
调用脚本的模式:

shell调用脚本的模式说明

在主脚本中嵌套脚本的方式有很多,常见的为fork、exec、source三种模式,这三种调用脚本的方式有一定的区别。

fork模式调用脚本知识

fork模式是最普通的脚本调用方式,及直接在父脚本里面用“/bin/bash /directory/script.sh”来调用脚本,或者在命令行中给script.sh脚本文件设置执行权限,然后使用/directory/script.sh来调用脚本。
  使用上述方式调用脚本的时候,系统会开启一个SubShell(子shell)执行调用的脚本,SubShell执行的时候ParentShell还在,SubShell执行完毕后返回到ParentShell。最后的结论是SubShell可以从ParentShell继承环境变量,但是默认情况下SubShell中的环境变量不能带回ParentShell。
  执行方式说明:
/directory/script.sh #<== 对脚本赋予执行权限,直接执行脚本。
/bin/bash /directory/script.sh #<== 在不赋予执行权限时,利用执行解释器执行

exec模式调用脚本

exec模式与fork模式调用脚本的方式不同,不需要新开一个SubShell来执行被调用的脚本。被调用的脚本与父脚本在同一个shell内执行,但是使用exec调用一个新脚本以后,父脚本中的exec执行之后的脚本内容就不会再执行了,这就是exec和source的区别
  执行方式说明:
exec /directory/script.sh

source模式调用脚本

source模式与fork模式的区别是不会新开一个SubShell来执行被调用的脚本,而是在同一个shell中执行,所以在被调用的脚本中声名的变量和环境变量都可以在主(父)脚本中获取和使用
  source模式与exec模式相比,最大的不同之处是使用source调用一个新脚本以后,父脚本中source命令行之后的内容在自脚本执行完毕后依然会被执行。
  执行方式说明:
source /directory/script.sh #<== 使用source不容易被误解,而“.”和“./”相近,容易被误解。
. /directory/script.sh #<== “.”和source命令的功能是等价的。

https://blog.csdn.net/lwj457700209/article/details/99600570
根据变量的生效范围等标准划分下面变量类型:
set:查看所有变量(全局变量,局部变量还有函数)
1.局部变量(标准变量,普通变量):生效范围为当前shell进程---当前会话(session);对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
echo $$:当前进程编号(4496)
echo $PPID:父进程编号(4272)

2.环境(全局)变量:生效范围为当前shell进程及其子进程(export=declare -x|env命令可以查看系统中环境变量)
第一种定义方法:name=mage------export name
第二种定义方法:export name=mage
第三种定义方法:declare -x name=mage

3.本地变量:生效范围为当前shell进程中某代码片断,通常指函数
4.位置变量:2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
5.特殊变量:0, @, USER"
(3) 命令引用:name=COMMAND name={name} $name
"":弱引用,其中的变量引用会被替换为变量值
'':强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name

你可能感兴趣的:(Linux 父子Shell)