如何访问 Linux Shell
通常,作为用户,我们通过终端仿真程序(例如 XTerm、konsole 或者 gnome-terminal)与 shell 程序进行交互。
如果我们运行 Windows 管理器(例如 Openbox)或者桌面环境(例如 GNOME 或者 KDE),我们会从菜单或者破折号中找到终端模拟器。
在许多系统上,快捷键 CTRL+ALT+T 会打开一个终端窗口。
或者,我们可以切换到另一个 TTY(电传打字机),它提供对命令行 shell 的直接访问。
我们可以通过按 CTRL+ALT+F1 或者 CTRL+ALT+F2 来执行此操作。
什么是shell级别?
当我们在 shell 中运行命令时,它会在 shell 级别运行。
在一个 shell 中,我们可以打开另一个 shell,这使它成为打开它的 shell 的子 shell。
因此,父shell 被认为是1 级shell,而子shell 是2 级shell。
如何创建子shell
测试shell和子shell概念的最简单方法如下。
打开终端窗口,然后键入以下内容:
echo $SHLVL
从终端窗口运行此命令时,最低 shell 级别为 2.
在终端窗口中键入以下内容:
sh
sh 命令运行交互式 shell。
这意味着我们在shell或者子shell中使用shell。
如果你再次输入:
echo $SHLVL
我们会看到 shell 级别设置为 3.
从子 shell 运行 sh 命令会打开子 shell 的子 shell,因此 shell 级别为 4.
什么是shell ?
shell 接收命令并将这些命令提供给底层操作系统来执行。
在大多数 Linux 系统上,shell 程序被称为 BASH(The Bourne Again Shell),但还有其他的,包括 C Shell (tcsh) 和 KORN shell (ksh)。
Linux shell 级别可能会变得复杂。 $SHLVL 可以提供帮助
$SHLVL 变量告诉你你有多少shell 深。
为什么shell 层级很重要?
在考虑脚本中变量的范围时,shell 级别很重要。
举个简单的例子:
dog=maisie echo $dog
如果我们在 shell 中运行上述命令,则 maisie 一词会显示在终端窗口中。
要打开一个新的 shell,执行以下内容:
sh
当你运行这个命令时,你会看到什么都没有返回:
echo $dog
这是因为 $dog 变量仅在 shell 级别 2 中可用。
如果我们键入 exit 退出子 shell 并再次运行 echo $dog,单词 maisie 将再次显示。
还值得考虑 shell 中全局变量的行为。
打开一个新的终端窗口,然后键入以下内容:
export dog=maisie echo $dog
正如预期的那样,显示单词 maisie。
接下来,打开一个子shell并再次输入 echo $dog 。
这一次,即使我们在子shell中,也会显示 maisie 一词。
这样做的原因是 export 命令使 $dog 变量成为全局变量。
更改子shell 中的$dog 变量,即使我们使用export 命令,也不会影响其父shell。
如何显示shell 层
判断我们在哪个 shell 级别运行的方法是使用 $SHLVL 变量。
要查看我们当前运行的 shell 级别,执行以下内容:
echo $SHLVL
当我们在终端窗口中运行上述命令时,返回的结果为 2.
但是,如果我们使用 tty 运行相同的命令,则结果为 1.
tty 不运行桌面环境并且是级别 1shell 。
为什么会这样?
我们正在运行的桌面环境运行在 shell 之上。
该 shell 是级别 1.
我们从该桌面环境打开的任何终端窗口都是打开桌面环境的 shell 的子窗口。
因此,shell 级别不能从 2 以外的任何数字开始。