Unix/Shell 和子 Shell 简介
当我们打开一个终端会话时,一个 Shell 会为我们启动。这就是为什么我们在终端窗口中看到一个提示符。
在一个 Shell 中,我们可以通过调用 Shell 程序文件或可执行文件来打开另一个 Shell - 子 Shell。例如,假设您已经打开了一个 Shell,一个普通的 Shell sh。您会看到这个
在这个 Shell 的提示符下,我可以调用一个新的子 Shell。我可以使用命令 bash 调用 bash Shell。新的 Shell 可以使用命令 exit 关闭。如果我调用一个 bash 子 Shell,我会看到类似的东西
如果我使用 exit 关闭这个 Shell,我会看到
一个 Shell 提供
- 一个提示符,供用户通过启动、管理、交互和结束进程来进行通信
- 一个用于进程和变量的容器
当您调用一个子 Shell 时,在这个 Shell 中启动的任何进程都包含在其中。除非它们被提交到一些持久存储 - 可能写入硬盘上的文件或从父 Shell 导出到新 Shell,否则任何创建的数据项都会随着 Shell 的关闭而消失。导出不在此处介绍:我们暂时假设变量在创建它们的 Shell 中消失。
为了使这更具体,请考虑这个序列。我们从终端会话中的任何 Shell 开始,创建一个 Shell 变量,就像这样
$ MYVARIABLE="This is the original shell"
要检查内容,我们可以使用 echo,并在变量名前加上 $,就像这样
$ echo $MYVARIABLE
现在我们调用一个 子 Shell。我们将使用 bash Shell。像这样
$ bash
这将启动一个新的 bash 子 Shell,我们可以从更改的提示符中看到,并且在子 Shell 中,我们创建了一个 Shell 变量,就像这样
bash% MYVARIABLE="This is the subshell. When it closes, this variable is destroyed!"
要检查这个变量的内容,我们使用 echo,就像之前一样
bash% echo $MYVARIABLE
在继续之前,请确保您知道这将显示什么。
现在,如果我们 exit,bash 子 Shell 将关闭,我们将返回到原始 Shell。算出输入以下内容的结果
$ echo $MYVARIABLE
将是什么。