Skip to main content

O que é um shell Linux e o que são níveis de shell?

O Grande Segredo P/ Ter MILHARES DE VISUALIZAÇÕES nos Seus Vídeos do Youtube (Abril 2025)

O Grande Segredo P/ Ter MILHARES DE VISUALIZAÇÕES nos Seus Vídeos do Youtube (Abril 2025)
Anonim

A variável $ SHLVL é usada para informar quantos shells você tem. Se você está confuso com isso vale a pena começar no início.

O que é um shell?

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

Como acessar o shell do Linux

Geralmente, como usuário, você interage com o programa shell através do uso de um programa de emulação de terminal, como o XTerm, o konsole ou o gnome-terminal.

Se você estiver executando um gerenciador de janelas, como o Openbox ou um ambiente de área de trabalho, como o GNOME ou o KDE, você encontrará um emulador de terminal a partir de um menu ou de um hífen. Em muitos sistemas, o atalho CTRL ALT e T também abrirão uma janela de terminal.

Alternativamente, você pode alternar para outro TTY (teletypewriter) que fornece acesso direto a um shell de linha de comando. Você pode fazer isso pressionando CTRL ALT e F1 ou CTRL ALT e F2, etc.

O que é um nível de casca?

Quando você executa um comando em um shell, ele é executado em algo chamado nível do shell. Dentro de um shell, você pode abrir outro shell que o torna um subshell ou o shell que o abriu.

Portanto, o shell pai seria considerado, talvez, o shell de nível 1 e o shell filho seria um shell de nível 2.

Como exibir o nível do shell

Não deve ser surpresa, com base no título do artigo, que a maneira como você pode dizer em qual nível de shell está sendo executado, usando a variável $ SHLVL.

Para ver o nível do shell que você está executando atualmente, digite o seguinte:

echo $ SHLVL

De forma bastante interessante, se você executar o comando acima em uma janela de terminal, ficará surpreso ao ver que o resultado retornado é 2.

Se, no entanto, você executar o mesmo comando usando o tty, o resultado será 1.

Por que esse é o caso que você pode perguntar? Bem, o ambiente de desktop que você está executando está sendo executado em cima de um shell. Esse shell seria o nível 1. Qualquer janela de terminal aberta no ambiente de área de trabalho deve ser filha do shell que abriu o ambiente de área de trabalho e, portanto, o nível do shell não pode ser iniciado em qualquer número diferente de 2.

O tty não está executando um ambiente de desktop e, portanto, é simplesmente um shell de nível 1.

Como criar subnails

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

Como sabemos a partir de uma janela de terminal, o nível mínimo de shell é 2.

Agora, dentro da janela do terminal, digite o seguinte:

sh

O comando sh por si só executa um shell interativo, o que significa que você está usando um shell dentro de um shell ou de um subshell.

Se você agora digitar novamente:

echo $ SHLVL

Você verá que o nível do shell está definido como 3. A execução do comando sh a partir do subshell abrirá uma subcamada da subshell e, portanto, o nível do shell estará no nível 4.

Por que o nível da casca é importante?

O nível do shell é importante quando se pensa no escopo das variáveis ​​nos seus scripts.

Vamos começar com algo simples:

dog = maisieecho $ dog

Se você executar o comando acima em um shell, a palavra maisie será exibida na janela do terminal.

Abra um novo shell digitando o seguinte:

sh

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

echo $ dog

Isso porque a variável $ dog está disponível apenas no nível de shell 2. Se você digitar exit para sair da subshell e executar echo $ dog novamente, a palavra maisie será exibida novamente.

Também vale a pena pensar sobre o comportamento de variáveis ​​globais dentro de um shell.

Comece em uma nova janela de terminal e digite o seguinte:

cão de exportação = maisieecho $ dog

Como você esperaria que a palavra maisie seja exibida. Agora abra um subshell e digite echo $ dog novamente. Desta vez, você verá que a palavra maisie é exibida mesmo que você esteja em uma subcamada.

A razão para isso é que o comando de exportação tornou a variável $ dog global. Alterar a variável $ dog dentro do subshell, mesmo se você usar o comando de exportação, não afeta os shells-pai.

Espero que com isso você possa ver que saber o nível de shell em que você está trabalhando tem algum significado ao escrever scripts.

Os exemplos que eu dei são muito simplistas, mas é bastante comum que um script de shell chame outro script de shell que, por sua vez, chama outro script de shell, todos eles rodando em diferentes níveis. Conhecer o nível da casca pode ser muito importante.