Variáveis de Ambiente: Configuração e Uso Prático

Variáveis de Ambiente: Configuração e Uso Prático

O que você vai conseguir fazer

  • Verificar o conteúdo de uma variável de ambiente com `echo $VAR` ou `env`
  • Definir uma com `export` e explicar a diferença para uma variável de shell
  • Entender como o `PATH` funciona e corrigir `command not found` sozinho

Pré-requisitos (leia estes primeiro)

O Que Você Vai Aprender

  • Verificar valores de variáveis de ambiente com echo $VAR ou env
  • Definir suas próprias variáveis de ambiente com export
  • Entender o PATH e corrigir erros "command not found" por conta própria
  • Persistir configurações entre sessões usando .bashrc

Público-Alvo: Você conhece comandos básicos (pwd, cd, ls) mas não tem certeza do que $HOME ou export realmente significam.

Introdução: O Que São Variáveis de Ambiente?

Lina: Linny-senpai, eu vejo $HOME e $PATH nos tutoriais o tempo todo. O que são? O sinal $ parece um feitiço mágico.
Veterano Linny: Boa pergunta. Elas se chamam "variáveis de ambiente". Pense nelas como anotações nomeadas que o seu shellUm programa interativo que interpreta os comandos digitados e os executa. guarda.
Lina: Anotações nomeadas?
Veterano Linny: Sim. Imagine um bilhete na geladeira dizendo "o leite fica na prateleira de baixo". Você não precisa procurar toda vez.
Veterano Linny: Do mesmo jeito, o shell guarda "o diretórioUm local que organiza arquivos. É a mesma ideia da "pasta" do Windows ou macOS. pessoal da Lina é /home/lina" com o nome HOME. Escreva $HOME e ele entrega o valor.

As palavras usadas aqui

Ou seja, a variável de ambiente é uma variável de shell com uma marca de "repasse isto". A Seção 2 prova a diferença com um experimento.

Resumo Rápido

  • Apenas verificar um valor → echo $VAR ou env | grep VAR
  • Usar apenas no shell atual → export VAR=value
  • Manter para o próximo login → escreva no ~/.bashrc
  • 80% dos erros "command not found" estão relacionados ao PATH

Pré-requisitos

1. Lendo Variáveis de Ambiente

Conclusão: Leia uma com echo $VAR e todas com env primeiro.

Veterano Linny: Vamos começar lendo, não definindo. Olhar primeiro é sempre mais seguro do que alterar.

1-1. Mostrar uma variável: echo $VAR

$ echo $HOME
/home/lina
$ echo $USER
lina

Pontos-Chave

  • O $ significa "substitua isto pelo valor da variável". Essa substituição se chama expansão.
  • Sem o $, o echo HOME apenas imprime o texto simples "HOME".
  • Nomes de variáveis são maiúsculos por convenção. Não é obrigatório, mas seguir isso deixa os arquivos mais legíveis.
Lina: O $ faz uma diferença enorme.
Veterano Linny: Este é o primeiro ponto em que iniciantes tropeçam. Lembre assim: "o $ é o interruptor que puxa o valor".

1-2. Mostrar todas as variáveis: env / printenv

$ env
SHELL=/bin/bash
USER=lina
HOME=/home/lina
PATH=/usr/local/bin:/usr/bin:/bin
LANG=en_US.UTF-8
PWD=/home/lina
...

O env lista todas as variáveis de ambiente que você tem agora. O printenv faz o mesmo trabalho.

Se a saída for longa, use env | less para ler uma tela por vez. Para achar uma variável, filtre com env | grep PATH.

1-3. Variáveis comuns para conhecer

Variável Significado Exemplo
HOME Seu diretório home /home/lina
USER Nome do usuário atual lina
PATH Diretórios pesquisados por comandos /usr/local/bin:/usr/bin:/bin
SHELL Seu shell de loginO primeiro shell iniciado logo após o usuário fazer login. /bin/bash
LANG Idioma e locale en_US.UTF-8
PWD Diretório atual (mesmo que pwd) /home/lina/work
Lina: Tem tantas. Preciso decorar todas?
Veterano Linny: Não precisa. No dia a dia, só HOME e PATH realmente importam. Para o resto, "bom saber que existe" já basta.

2. Definindo Variáveis: Atribuição vs export

Conclusão: Uma atribuição simples fica no shell atual. O export a transforma em variável de ambiente, herdada pelos filhos.

Veterano Linny: Agora é a sua vez de definir. Existe uma armadilha clássica aqui, então vamos devagar.

2-1. Atribuição simples (variável de shell)

$ MY_NAME=lina
$ echo $MY_NAME
lina

Não coloque espaços ao redor do =.

Se você escrever MY_NAME = lina, o shell lê isso como "execute um comando chamado MY_NAME". Isso falha. É o acidente mais comum entre iniciantes.

2-2. Promover para "variável de ambiente" com export

$ MY_NAME=lina
$ export MY_NAME

Ou de uma vez:

$ export MY_NAME=lina
Lina: Qual é a diferença real entre atribuição e export? Parecem iguais para mim.
Veterano Linny: Pergunta importante. Uma atribuição simples é visível apenas dentro do shell atual.
Veterano Linny: Scripts e comandos que você inicia dali, os processos filhos, nunca a enxergam. Adicione export e ela vira uma variável de ambiente que os filhos conseguem ler.

2-3. Veja a diferença você mesmo

$ MY_VAR=hello
$ bash -c 'echo $MY_VAR'

Nada é impresso; você recebe uma linha em branco. O bash -c inicia um novo shell como processo filho, e o MY_VAR nunca chegou lá.

$ export MY_VAR=hello
$ bash -c 'echo $MY_VAR'
hello

Desta vez foi impresso. O export entregou o valor ao filho.

Regra prática: Se um script ou outro comando precisa do valor, sempre use export. Para um rascunho pessoal, = simples é suficiente.

2-4. Deletar uma variável

$ unset MY_VAR
$ echo $MY_VAR

O unset remove a variável apenas do shell atual.

Um valor escrito no .bashrc permanece até você editar aquele arquivo.

3. PATH: A Variável Mais Importante

Conclusão: O PATH é a lista de diretórios pesquisados por comandos. Sempre mantenha o :$PATH no final ao adicionar um.

Lina: Eu fico recebendo erros "command not found". Isso também tem relação com variáveis de ambiente?
Veterano Linny: Tem muita relação. Entenda o PATH e você corrige o "command not found" sozinha.

3-1. Inspecionar PATH

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Pontos-Chave

  • O PATH guarda uma lista de diretórios, separados por :.
  • Quando você digita um comando, o shell busca nesses diretórios da esquerda para a direita.
  • O primeiro comando com o nome correspondente vence.

Pense em uma fileira de armários de escola. O PATH é a instrução que diz qual fileira conferir primeiro.

3-2. Encontrar onde um comando mora: which

$ which ls
/usr/bin/ls
$ which python3
/usr/bin/python3
Lina: Então o ls na verdade mora em /usr/bin/.
Veterano Linny: Exatamente. Digitar ls funciona porque /usr/bin está no seu PATH.
Veterano Linny: Remova esse diretório do PATH e você teria que digitar o caminhoUma sequência de texto que descreve a localização de um arquivo ou diretório. completo, /usr/bin/ls, toda vez.

3-3. Adicionar um diretório pessoal ao PATH

Suponha que você queira uma pasta ~/bin para os seus próprios scripts.

$ mkdir -p ~/bin
$ export PATH="$HOME/bin:$PATH"

Sempre mantenha o :$PATH no final.

Escrever apenas export PATH="$HOME/bin" apaga o PATH existente. Quase todos os comandos passam a reportar "command not found". É o acidente mais frequente com esta variável.

Se acontecer, abrir um terminal novo restaura tudo. Desde que você não tenha escrito isso em um arquivo de configuração, nada mais é necessário.

3-4. A ordem muda o comportamento

# Preferir minha versao
$ export PATH="$HOME/bin:$PATH"

# Preferir a versao do sistema (minha como fallback)
$ export PATH="$PATH:$HOME/bin"

Dica útil: Quando uma mudança no PATH quebrar algo, execute which nome-do-comando. Ele mostra exatamente qual arquivo está sendo usado, o caminho mais rápido até a causa.

3-5. Lina se atrapalha: sobrescrever o PATH

Lina: Executei export PATH="$HOME/bin" e agora nem o ls nem o cat funcionam. Eu quebrei a minha máquina?
Veterano Linny: Nada quebrou. Você sobrescreveu o PATH, então o shell parou de procurar em /usr/bin.
Lina: Então os comandos em si não foram apagados?
Veterano Linny: Isso. Os arquivos dos comandos continuam todos lá. Só a instrução de onde procurar sumiu.
Lina: Era só o local da busca. Que alívio.
Veterano Linny: E a correção é fácil. Abra um terminal novo e tudo volta. Se você nunca escreveu isso no .bashrc, o conserto termina aí.

Corrigindo sem abrir outro terminal

Se você preferir corrigir o shell em que está, digite isto:

$ export PATH="/usr/local/bin:/usr/bin:/bin:$PATH"

Os comandos básicos voltam a funcionar. Depois reescreva a linha da forma correta.

4. Persistência: Sobrevivendo ao Próximo Login

Conclusão: O export vale apenas para o shell atual. Para manter um valor, escreva no ~/.bashrc e aplique com source.

Lina: Eu defini uma variável com export. Quando fechei o terminal, ela sumiu.
Veterano Linny: Esse é o tópico da persistência. O export vale apenas para o shell atual.
Veterano Linny: O próximo shell já esqueceu. Para manter, escreva em um arquivo de configuração.

Primeiro, o caminho de volta

Daqui em diante você edita um arquivo de configuração. Um erro nele pode gerar uma mensagem de erro toda vez que você abre um terminal.

Copie o arquivo antes de editar.

$ cp ~/.bashrc ~/.bashrc.bak

Se algo der errado, restaure a cópia.

$ cp ~/.bashrc.bak ~/.bashrc
$ source ~/.bashrc

Se o terminal abrir e fechar na hora, inicie um shell que ignora os arquivos de configuração. De outro terminal, digite bash --norc --noprofile e depois execute o cp acima.

4-1. Qual arquivo devo editar?

Arquivo Quando carrega Uso típico
~/.bashrc Todo shell bash interativo Variáveis e aliases pessoais
~/.profile / ~/.bash_profile Uma vez no login Variáveis de ambiente no SSH
/etc/environment Sistema inteiro, todos os usuários Configurações compartilhadas (rootA conta de administrador especial que pode fazer qualquer coisa no sistema.)

Na dúvida, edite o ~/.bashrc. É a escolha mais confiável para terminais GUI, WSL e sessões SSH.

4-2. Exemplo de adições ao .bashrc

Adicione no final:

# Personal scripts directory
export PATH="$HOME/bin:$PATH"

# Locale
export LANG=en_US.UTF-8

# Default editor
export EDITOR=vim

4-3. Recarregar imediatamente com source

$ source ~/.bashrc

Ou o atalho com ponto:

$ . ~/.bashrc

Muita gente esquece o source e depois se pergunta por que o PATH não mudou.

Após editar um arquivo de configuração, sempre execute source. Fazer login de novo tem o mesmo efeito.

Lina: O que o source realmente faz?
Veterano Linny: Ele manda o shell reler o arquivo dentro do shell atual.
Veterano Linny: Se você executa um script do jeito normal, isso acontece em um processo separado. Qualquer export lá dentro nunca volta para o shell pai.
Veterano Linny: O source executa as linhas no shell em que você está, então as configurações permanecem.

5. Armadilhas Comuns

Conclusão: Um $ esquecido, espaços ao redor do =, um PATH sobrescrito e as aspasEnvolver um texto entre aspas (' ou ") para que seja tratado como um único valor, por exemplo um que tenha espaços. erradas. Esses quatro são os acidentes clássicos.

Veterano Linny: Você já tem os fundamentos. Vou encerrar com os erros que iniciantes cometem com mais frequência.

5-1. Esquecer / adicionar $

# Errado: imprime a string literal "HOME"
$ echo HOME

# Certo: expande o valor
$ echo $HOME

5-2. Espaços ao redor de =

# Errado: interpretado como um comando, falha
$ MY_VAR = hello

# Certo
$ MY_VAR=hello

5-3. Apagar o PATH

# Desastre: PATH existente e perdido
$ export PATH="$HOME/bin"

# Correto
$ export PATH="$HOME/bin:$PATH"

Se você apagar o PATH sem querer, apenas abra um novo terminal. O padrão volta sozinho. Não há motivo para editar o .bashrc em pânico.

5-4. Aspas simples vs aspas duplas

$ NAME=lina

# Aspas duplas: $NAME e expandido
$ echo "Hello $NAME"
Hello lina
# Aspas simples: literal, sem expansao
$ echo 'Hello $NAME'
Hello $NAME

Regra prática: Use aspas duplas "..." quando quiser expansão de variáveis. Use aspas simples '...' para strings literais.

5-5. "Eu exportei mas meu script não vê"

Quando você executa um script como ./script.sh, as variáveis exportadas no shell pai são herdadas.

Um terminal novo é diferente. Ele lê o .bashrc do zero, então uma variável que não está escrita lá simplesmente não existe.

Para as variáveis das quais seus scripts dependem, escreva-as no .bashrc para que estejam sempre presentes.

6. Prática Hands-On

Conclusão: Mostrar uma variável, adicionar ~/bin ao PATH e executar o próprio comando. Três exercícios levam da definição até a persistência.

Veterano Linny: O conhecimento fixa mais rápido quando você digita. Vamos fazer três exercícios.

Exercício 1: Coloque o seu nome em uma variável e mostre-o no formato "Hello, nome".

Ver Dica 1 (Direção)

Primeiro coloque o nome em uma caixa. Depois mostre o conteúdo dessa caixa como parte de uma frase. Envolva a frase inteira em aspas.

Ver Dica 2 (Nome do comando)

A atribuição tem a forma NOME=valor. Para mostrar, use echo. Como você quer o valor expandido, use aspas duplas "...".

Ver Resposta
$ MY_NAME=lina
$ echo "Hello, $MY_NAME!"
Hello, lina!

Troque lina pelo seu próprio nome. Não coloque espaços ao redor do =.

Exercício 2: Crie um diretório ~/bin e faça com que ele também entre no PATH do próximo terminal.

Ver Dica 1 (Direção)

Crie o diretório. Depois adicione ao final do arquivo de configuração uma linha que o inclua no PATH. Por fim, releia esse arquivo.

Ver Dica 2 (Nome do comando)

Crie com mkdir -p. Adicione com echo e >>. Releia com source. O arquivo é o ~/.bashrc.

Ver Resposta
$ mkdir -p ~/bin
$ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
$ echo $PATH
/home/lina/bin:/usr/local/bin:/usr/bin:/bin

Ver /home/seunome/bin perto do início significa que funcionou.

As aspas simples importam aqui. Elas impedem a expansão no momento de escrever no .bashrc, para que ela aconteça quando o arquivo for lido.

Exercício 3: Coloque um comando seu em ~/bin e chame-o de qualquer lugar.

Ver Dica 1 (Direção)

São três passos. Crie o arquivo, marque-o como executável e depois chame-o apenas pelo nome.

Ver Dica 2 (Nome do comando)

Crie o arquivo com cat > nome-do-arquivo. Pressione Ctrl+D quando terminar de digitar o conteúdo. Marque como executável com chmod +x. Depois disso, o nome do arquivo é o comando.

Ver Resposta
$ cat > ~/bin/hello
#!/bin/bash
echo "Hello from my own script!"

Digite essas duas linhas e depois pressione Ctrl+D. Isso salva o arquivo.

A primeira linha, #!/bin/bash, é a forma padrão de dizer "execute este arquivo com o bash". Ela se chama shebang.

$ chmod +x ~/bin/hello
$ hello
Hello from my own script!

Se aparecer command not found, verifique se você executou o source ~/.bashrc do Exercício 2.

Para apagar o arquivo, execute rm ~/bin/hello. Um arquivo removido com rm não vai para a lixeira; ele some na hora. Confira o conteúdo com ls ~/bin antes de remover qualquer coisa.

Lina: Funcionou. Executar o meu próprio comando de qualquer lugar é ótimo.
Veterano Linny: Esse é o poder do PATH. O "command not found" não vai mais te assustar.

7. Revisão

Lina: Vou resumir. O $ é o interruptor que puxa o valor. O export entrega esse valor aos processos filhos.
Veterano Linny: Isso. E escrever no .bashrc mantém o valor para o próximo terminal.
Lina: O PATH é a lista de lugares onde procurar. Quando aparecer command not found, eu confiro echo $PATH e which primeiro.
Veterano Linny: É isso. Só nunca deixe cair o :$PATH do final quando for editá-lo.

8. Resumo

Folha de consulta rápida

# Inspecionar
echo $HOME                # Variavel unica
env                       # Todas as variaveis
env | grep PATH           # Filtrar
which nomecomando         # Onde ele esta?

# Definir
MY_VAR=value              # Variavel de shell (apenas shell atual)
export MY_VAR=value       # Variavel de ambiente (filhos tambem)
unset MY_VAR              # Deletar

# Adicionar ao PATH com seguranca
export PATH="$HOME/bin:$PATH"   # Sempre acrescente $PATH

# Persistir
vim ~/.bashrc             # Acrescente linhas de export
source ~/.bashrc          # Aplique agora

Não faça isto

  • export PATH="$HOME/bin" (apaga o PATH existente)
  • MY_VAR = value (espaços ao redor de =)
  • Colocar $HOME entre aspas simples e se perguntar por que não expande
  • Editar .bashrc sem fazer source e reclamar que "nada mudou"

Resumo do Dia em 3 Linhas

  1. O $VAR puxa o valor de uma variável. Leia o estado atual com echo $HOME ou env
  2. Somente as variáveis marcadas com export são entregues aos processos filhos
  3. Ao adicionar algo ao PATH, mantenha sempre o :$PATH no final

Próxima Leitura