Skip to content

Como e por que você usaria a variável $ SHLVL

17 de abril de 2021

A variável $ SHLVL diz a você quantos shells você está. Se você está confuso com isso, vale a pena começar do início.

O que é uma concha?

Um shell recebe comandos e os fornece para o sistema operacional subjacente executar. Na maioria dos sistemas Linux, o programa shell é chamado BASH (The Bourne Again Shell), mas existem outros, incluindo o C Shell (tcsh) e o shell KORN (ksh).

Como acessar o Linux Shell

Geralmente, como usuário, você interage com o programa shell por meio de um programa de emulação de terminal, como XTerm, konsole ou gnome-terminal. Se você executar um gerenciador de janelas como o Openbox ou um ambiente de área de trabalho como o GNOME ou KDE, encontrará um emulador de terminal em um menu ou traço. Em muitos sistemas, o atalho CTRL + ALT + T abre uma janela de terminal. Como alternativa, você pode alternar para outro TTY (teletipo), que fornece acesso direto a um shell de linha de comando. Você pode fazer isso pressionando CTRL + ALT + F1 ou CTRL + ALT + F2.

O que é um nível de Shell?

Quando você executa um comando em um shell, ele é executado no nível do shell. Dentro de um shell, você pode abrir outro shell, o que o torna um subshell do shell que o abriu. Portanto, o shell pai é considerado o shell de nível 1 e o shell filho é um shell de nível 2.

Como exibir o nível da casca

A maneira de saber em qual nível do shell você está executando é usar a variável $ SHLVL. Para ver o nível de shell em que você está executando, digite o seguinte: echo $ SHLVL

type = “code”> Quando você executa o comando acima em uma janela de terminal, o resultado retornado é 2. Se, no entanto, você executar o mesmo comando usando o tty, o resultado será 1. O tty não executa um desktop ambiente e é um shell de nível 1. Por que isso acontece? O ambiente de trabalho que você está executando é executado em cima de um shell. Esse shell é o nível 1. Qualquer janela de terminal que você abrir nesse ambiente de área de trabalho é filha do shell que abriu o ambiente de área de trabalho. Portanto, o nível do shell não pode começar em qualquer número diferente de 2.

Como Criar Subshells

A maneira mais fácil de testar o conceito de shells e subshells é a seguinte. Abra uma janela de terminal e digite o seguinte: echo $ SHLVL

type = “code”> Quando você executa este comando em uma janela de terminal, o nível mínimo de shell é 2. Digite o seguinte na janela de terminal: sh

type = “code”> O comando sh executa um shell interativo. Isso significa que você está usando um shell dentro de um shell ou subshell. Se você digitar novamente: echo $ SHLVL

type = “code”> Você vê que o nível do shell está definido como 3. Executar o comando sh do subshell abre um subshell do subshell e, portanto, o nível do shell está no nível 4.

Por que o nível do shell é importante?

O nível do shell é importante quando se pensa no escopo das variáveis ​​em seus scripts. Para um exemplo simples: dog = maisie
echo $ dog

type = “code”> Se você executar o comando acima em um shell, a palavra maisie é exibido na janela do terminal. Para abrir um novo shell, digite o seguinte: sh

type = “code”> Ao executar este comando, você verá que nada é retornado: echo $ dog

type = “code”> Isso porque a variável $ dog só está disponível no nível de shell 2. Se você digitar exit para sair do subshell e executar echo $ dog novamente, a palavra maisie é exibido novamente. Também vale a pena pensar sobre o comportamento das variáveis ​​globais dentro de um shell. Abra uma nova janela de terminal e digite o seguinte: export dog = maisie
echo $ dog

type = “code”> Como esperado, a palavra maisie exibe. Em seguida, abra um subshell e digite echo $ dog novamente. Desta vez, a palavra maisie é exibido mesmo que você esteja em um subshell. A razão para isso é que o comando export tornou a variável $ dog global. Alterar a variável $ dog no subshell, mesmo se você usar o comando export, não afeta seus shells pai. Saber o nível do shell em que você está trabalhando tem significado ao escrever scripts. Os exemplos neste artigo são simples, mas é comum que um script de shell chame outro script de shell que, por sua vez, chama outro script de shell. Todos eles são executados em níveis diferentes. Saber o nível do shell é importante.