LinuxShell父子关系概述
1. 父 Shell
父 Shell 是用于登录某个远程主机或虚拟控制器终端或在 GUI 中运行终端仿真器时所启动的默认的交互式 Shell 。
Linux Shell 中在当前 Shell 执行脚本文件的方式有:
1
2
source script # 在当前 Shell 执行 script 文件
. script # 在当前 Shell 执行 script 文件
2. 子 Shell(subshell)
子 Shell 是父 Shell 进程调用了 fork()
函数,在内存中复制出一个与父 Shell 进程几乎完全一样的子进程。
-
子 Shell 继承了父 Shell 的所有环境变量(包括全局和局部变量)
-
可以通过环境变量
BASH_SUBSHELL
(其值表明子 Shell 的嵌套深度)判断是第几层子 Shell(0 说明当前 Shell 不是子 Shell)
Linux Shell 中创建子 Shell 的方式有:
1
2
3
`command[;command...]` # command 在子 Shell 中执行
( command[;command...] ) # command 在子 Shell 中执行(可嵌套)
command1 | command2 # command1 和 command2 都在子 Shell 中运行
3. 孩子 Shell(child shell)
孩子 Shell 是父 Shell 进程调用了 fork()
函数后又调用了 execve()
函数来执行新的 shell 命令(比如 bash
),从而覆盖 fork()
复制出来的 Shell 子进程。
- 孩子 Shell 只继承到父 Shell 的全局环境变量(而不能访问到父 Shell 的局部环境变量)
- 可以通过环境变量
SHLVL
(其值表明孩子 Shell 的嵌套深度)判断是第几层孩子 Shell(启动的第一个 Shell 其SHLVL
为 1)
Linux Shell 中创建孩子 Shell 的方式有:
1
2
bash script # 以 Bash Shell 为例,script 在孩子 Shell 中执行
./script # 前提是 script 文件具有可执行权限,script 在孩子 Shell 中执行
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!