$ SHLVL变量用于告诉你你有多少炮弹。如果你对此感到困惑,那么从一开始就值得开始。
什么是壳牌?
shell接受命令并将它们提供给底层操作系统来执行。在大多数Linux系统上,shell程序称为BASH(Bourne Again Shell),但还有其他可用的程序,包括C Shell(tcsh)和KORN shell(ksh)。
如何访问Linux Shell
通常,作为用户,您通过使用终端仿真程序(如XTerm,konsole或gnome-terminal)与shell程序进行交互。
如果您正在运行Openbox等Windows管理器或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。
如何显示Shell级别
根据文章的标题,您可以通过使用$ SHLVL变量来判断运行哪个shell级别,这应该不足为奇。
要查看当前正在运行的shell级别,请键入以下内容:
echo $ SHLVL
相当有趣的是,如果在终端窗口中运行上述命令,您可能会惊讶地发现返回的结果是2。
但是,如果使用tty运行相同的命令,则结果为1。
为什么你会问这个案子?那么你正在运行的桌面环境正在shell上运行。该shell将为1级。您在该桌面环境中打开的任何终端窗口都必须是打开桌面环境的shell的子级,因此shell级别不能以2以外的任何数字启动。
tty没有运行桌面环境,因此只是一级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级别很重要。
让我们从简单的事情开始:
狗=梅西回声$ dog 如果在shell中运行上述命令,单词maisie将显示在终端窗口中。 键入以下命令打开一个新shell: SH 如果运行此命令,您将看到实际上没有返回任何内容: 回声$ dog 这是因为$ dog变量仅在shell级别2可用。如果键入exit退出子shell并再次运行echo $ dog,则会再次显示maisie一词。 值得考虑shell中全局变量的行为。 从新的终端窗口开始,输入以下内容: 出口狗= maisie回声$ dog 正如您所期望的那样,显示maisie这个词。现在打开一个子shell并再次键入echo $ dog。这次你会看到即使你在子shell中也会显示maisie这个词。 原因是export命令使$ dog变量全局化。即使使用export命令,更改子shell中的$ dog变量也不会影响其父shell。 希望从中可以看出,在编写脚本时,了解您正在使用的shell级别具有一定的意义。 我给出的示例非常简单,但是一个shell脚本调用另一个shell脚本是很常见的,而另一个shell脚本又调用另一个shell脚本,所有这些脚本现在都在不同的级别运行。了解shell级别非常重要。