$ SHLVL变量用于告诉你有多少个弹壳。 如果你对此感到困惑,那就值得从头开始。
什么是壳牌?
shell接受命令并将它们提供给底层操作系统执行。 在大多数Linux系统上,shell程序被称为BASH(Bourne Again Shell),但也有其他的可用的,包括C Shell(tcsh)和KORN shell(ksh)。
如何访问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可能被认为是1级shell,而子shell将是2级shell。
如何显示壳牌等级
根据文章的标题,您应该可以通过使用$ SHLVL变量来分辨出您运行的shell级别。
要查看当前正在运行的shell级别,请输入以下命令:
echo $ SHLVL
相当有趣的是,如果您在终端窗口中运行上述命令,您可能会惊讶地发现返回的结果为2。
如果你使用tty运行相同的命令,那么结果是1。
为什么你可能会问这种情况? 那么你正在运行的桌面环境正在运行在一个shell之上。 该shell将为级别1.您在该桌面环境中打开的任何终端窗口必须是打开桌面环境的shell的子项,因此shell级别不能从除2之外的任何数字开始。
tty没有运行桌面环境,因此只是一个1级shell。
如何创建子壳
测试shell和子壳概念的最简单方法如下。 打开一个终端窗口并输入以下内容:
echo $ SHLVL
正如我们从终端窗口所了解的,最小外壳级别是2。
现在在终端窗口中键入以下内容:
SH
sh命令自己运行一个交互式shell,这意味着您在shell或子shell中使用一个shell。
如果你现在再次输入:
echo $ SHLVL
您将看到shell级别设置为3.在子shell中运行sh命令将打开子shell的子shell,因此shell级别将位于级别4。
为什么壳牌等级很重要?
考虑脚本中的变量范围时,shell级别非常重要。
让我们从简单的事情开始:
狗=梅西
回声$狗
如果您在shell中运行上述命令,maisie一词将显示在终端窗口中。
输入以下内容打开一个新的shell:
SH
如果你运行这个命令,你会发现实际上没有返回任何东西:
回声$狗
这是因为$ dog变量仅在shell级别2可用。如果输入exit退出子shell并再次运行echo $ dog,则会再次显示maisie一词。
同样值得考虑一下shell中全局变量的行为。
从一个新的终端窗口开始,输入以下内容:
出口狗= maisie
回声$狗
正如你所期望的,maisie这个词是显示出来的。 现在打开一个子shell并再次输入echo $ dog。 这一次,即使您处于子外壳中,您也会看到maisie这个词。
原因是导出命令使$ dog变量为全局变量。 即使使用export命令更改子shell中的$ dog变量也不会影响其父shell。
希望从这里可以看出,在编写脚本时,了解您正在使用的shell级别具有一定的意义。
我给出的例子非常简单,但是一个shell脚本调用另一个shell脚本是非常常见的,这个脚本又调用另一个shell脚本,它们现在都在不同的级别上运行。 了解壳级可能非常重要。