Testar a Herança de Variáveis e Aliases em um Shell Filho
Nesta etapa, você explorará como variáveis e aliases se comportam quando você inicia um novo shell a partir do atual. Este novo shell é chamado de "shell filho" (child shell), e o shell original é o "shell pai" (parent shell). Este conceito é crucial para entender como os ambientes de shell são estruturados e como os scripts são executados. Testaremos se as variáveis flower e nut da etapa anterior são transmitidas, ou "herdadas", por um shell filho.
Primeiro, vamos identificar o ID do Processo (PID) do nosso shell pai atual. Cada processo no Linux possui um PID exclusivo. Você pode visualizá-lo com o comando echo $$.
echo $$
Sua saída será um número, que é o PID do seu shell atual. Por exemplo:
123
Agora, inicie um shell filho simplesmente digitando zsh e pressionando Enter. Isso cria um novo processo de shell dentro do atual.
zsh
Você está agora em uma nova sessão de shell. Para confirmar isso, podemos usar o comando ps -f, que mostra informações detalhadas do processo, incluindo o ID do Processo Pai (PPID).
ps -f
Observe a saída. Você verá dois processos zsh. O PID do novo processo zsh deve ter um PPID que corresponda ao PID do shell pai que você anotou anteriormente.
UID PID PPID C STIME TTY TIME CMD
labex 123 1 0 10:00 pts/0 00:00:00 zsh
labex 456 123 0 10:01 pts/0 00:00:00 zsh
labex 457 456 0 10:01 pts/0 00:00:00 ps -f
Neste exemplo, o novo shell (PID 456) é um filho do shell original (PPID 123).
Agora, vamos testar as variáveis. Neste shell filho, tente exibir o valor da variável local flower.
echo $flower
O comando não produz saída. Isso ocorre porque as variáveis locais estão restritas ao shell em que foram criadas e não são herdadas por shells filhos.
Em seguida, verifique a variável de ambiente nut.
echo $nut
Desta vez, o shell imprime o valor da variável:
almond
Isso demonstra que as variáveis de ambiente, ao contrário das variáveis locais, são herdadas pelos shells filhos.
Agora, vamos retornar ao shell pai usando o comando exit.
exit
Você está de volta ao seu shell original. Vamos realizar um teste semelhante com um alias. Um alias é um atalho para um comando. Crie um alias chamado ldetc que executa ls -ld /etc.
alias ldetc='ls -ld /etc'
Verifique se o alias foi criado digitando alias.
alias ldetc
Você deverá ver a definição do seu alias:
ldetc='ls -ld /etc'
Agora, teste o alias executando-o.
ldetc
O comando executará ls -ld /etc e mostrará os detalhes do diretório /etc.
drwxr-xr-x 1 root root 4096 Oct 10 10:00 /etc
Agora, abra outro shell filho para ver se o alias é herdado.
zsh
Dentro do novo shell filho, tente usar o alias ldetc.
ldetc
Você receberá uma mensagem de erro, pois os aliases, assim como as variáveis locais, não são herdados por shells filhos.
zsh: command not found: ldetc
Retorne ao shell pai.
exit
Por fim, vamos fazer uma limpeza removendo o alias do shell pai usando o comando unalias.
unalias ldetc
Verifique a remoção tentando listá-lo novamente.
alias ldetc
Nada é retornado.
Este exercício mostrou um princípio fundamental do comportamento do shell: variáveis de ambiente são herdadas por processos filhos, mas variáveis locais e aliases não são.