如何访问 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)。

Shell的级别 $SHLVL 变量

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 以外的任何数字开始。

日期:2020-07-15 11:16:49 来源:oir作者:oir