O que é um Linux Shell e quais são os níveis de Shell?

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

Captura de tela do comando $ SHLVL Linux em uso

O que é uma concha?

UMA Concha 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 KORN shell (ksh).

Como acessar o Linux Shell

Geralmente, como usuário, você interage com o programa shell por meio de um emulação de terminal programa como XTerm, konsoleou terminal gnome.

Se você executar um gerenciador de janelas como Caixa aberta ou um ambiente de trabalho como GNOME ou KDE, você encontrará um emulador de terminal em um menu ou um 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 de shell você está executando é usar a variável $ SHLVL. Para ver o nível de shell que você está executando no momento, digite o seguinte:

echo $ SHLVL. 

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 ambiente de desktop 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 escudo é 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. 

Quando você executa este comando em uma janela de terminal, o nível mínimo do shell é 2.

Digite o seguinte na janela do terminal:

sh. 

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. 

Você vê que o nível do shell está definido como 3. Executar o comando sh a partir do subshell abre um subshell do subshell e, portanto, o nível do shell está no nível 4.

Por que o nível de shell é importante?

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

cachorro = maisie
echo $ dog.

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. 

Ao executar este comando, você verá que nada é retornado:

echo $ dog. 

Isso porque a variável $ dog está disponível apenas no nível 2 do shell. Se você digitar exit para sair do subshell e executar echo $ dog de novo, 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.

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.