Variaveis de Ambiente: Configuracao e Uso Pratico

Variaveis de Ambiente: Configuracao e Uso Pratico

O Que Voce Vai Aprender

  • Verificar valores de variaveis de ambiente com echo $VAR ou env
  • Definir suas proprias variaveis de ambiente com export
  • Entender o PATH e corrigir erros "command not found" por conta propria
  • Persistir configuracoes entre sessoes usando .bashrc

Publico-Alvo: Voce conhece comandos basicos (pwd, cd, ls) mas nao tem certeza do que $HOME ou export realmente significam.

Introducao: O Que Sao Variaveis de Ambiente?

Lina: Linny-senpai, eu fico vendo coisas como $HOME e $PATH nos tutoriais. O que sao essas coisas? O sinal $ parece um feitico magico que eu nao entendo.
Veterano Linny: Otima pergunta! Elas sao chamadas de "variaveis de ambiente." Pense nelas como anotacoes nomeadas que seu shell lembra.
Lina: Anotacoes nomeadas?
Veterano Linny: Sim. Por exemplo, o shell lembra "o diretorio home da Lina e /home/lina" com o nome HOME. Entao quando voce escreve $HOME, o shell procura a anotacao e substitui por /home/lina.

Resumo Rapido

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

Pre-requisitos

  • SO: Ubuntu / outras distribuicoes Linux
  • Shell: bash (zsh funciona quase da mesma forma)
  • Um terminal mostrando o prompt $

1. Lendo Variaveis de Ambiente

Conclusao: Leia uma com echo $VAR e todas com env primeiro.

Veterano Linny: Vamos comecar lendo, nao definindo. Olhar primeiro e sempre mais seguro do que alterar.

1-1. Mostrar uma variavel: echo $VAR

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

Pontos-Chave:

  • $ significa "expandir o valor desta variavel"
  • Sem $, echo HOME apenas imprime o texto literal "HOME"
  • Nomes de variaveis sao maiusculos por convencao (nao e obrigatorio, mas e a norma)
Lina: Uau, o $ faz uma diferenca enorme!
Veterano Linny: E o tropeco mais comum de iniciantes. Lembre-se: "o $ e o interruptor que puxa o valor."

1-2. Mostrar todas as variaveis: 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
...

Se a saida for longa, use env | less para paginar, ou env | grep PATH para filtrar.

1-3. Variaveis comuns para conhecer

Variavel Significado Exemplo
HOME Seu diretorio home /home/lina
USER Nome do usuario atual lina
PATH Diretorios pesquisados por comandos /usr/local/bin:/usr/bin:/bin
SHELL Seu shell de login /bin/bash
LANG Idioma e locale en_US.UTF-8
PWD Diretorio atual (mesmo que pwd) /home/lina/work
Lina: Tem tantas... preciso decorar todas?
Veterano Linny: Nao. Na pratica, apenas HOME e PATH realmente importam. O resto e apenas "bom saber que existe."

2. Definindo Variaveis: Atribuicao vs export

Conclusao: Atribuicao simples fica local; export passa para processos filhos.

Veterano Linny: Agora vamos definir nossas proprias variaveis. Ha uma armadilha classica aqui, entao vamos devagar.

2-1. Atribuicao simples (variavel de shell)

$ MY_NAME=lina
$ echo $MY_NAME
lina

Sem espacos ao redor de =. Escrever MY_NAME = lina faz o shell pensar "execute um comando chamado MY_NAME," que falha. Este e o acidente mais comum de iniciantes.

2-2. Promover para "variavel de ambiente" com export

$ MY_NAME=lina
$ export MY_NAME

Ou de uma vez:

$ export MY_NAME=lina
Lina: Qual e a diferenca real entre atribuicao e export? Parecem iguais para mim.
Veterano Linny: Pergunta importante! Uma atribuicao simples e visivel apenas dentro do shell atual. Processos filhos (scripts e comandos que voce executa) nao a enxergam. Adicione export e a variavel e "exportada" para os filhos tambem.

2-3. Veja a diferenca voce mesmo

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

(em branco — nada impresso)

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

Regra pratica: Se um script ou outro comando precisa do valor, sempre use export. Para um rascunho pessoal, = simples e suficiente.

2-4. Deletar uma variavel

$ unset MY_VAR
$ echo $MY_VAR

unset remove a variavel apenas do shell atual. Para deletar um valor definido no .bashrc, edite o arquivo em si.

3. PATH: A Variavel Mais Importante

Conclusao: PATH lista diretorios de comandos; sempre acrescente :$PATH ao adicionar.

Lina: Eu fico recebendo erros "command not found". Isso esta relacionado com variaveis de ambiente tambem?
Veterano Linny: Acertou em cheio. Entender PATH e exatamente como voce corrige "command not found."

3-1. Inspecionar PATH

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

Pontos-Chave:

  • E uma lista de diretorios separados por :
  • Quando voce digita um comando, o shell busca nesses diretorios da esquerda para a direita
  • A primeira correspondencia vence

3-2. Encontrar onde um comando mora: which

$ which ls
/usr/bin/ls
$ which python3
/usr/bin/python3
Lina: Entao ls na verdade mora em /usr/bin/!
Veterano Linny: Exatamente. A razao pela qual voce pode simplesmente digitar ls e porque /usr/bin esta no seu PATH. Se voce o removesse, teria que digitar o caminho completo /usr/bin/ls toda vez.

3-3. Adicionar um diretorio pessoal ao PATH

Para usar uma pasta ~/bin para seus proprios scripts:

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

Sempre acrescente $PATH no final. Escrever export PATH="$HOME/bin" sozinho apaga o PATH existente — quase todos os comandos entao reportarao "command not found." Este e o acidente #1 com PATH.

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 pro: Se mudancas no PATH quebrarem algo, execute which nome-do-comando para ver exatamente qual binario esta sendo usado.

4. Persistencia: Sobrevivendo ao Proximo Login

Conclusao: export dura uma sessao; escreva no .bashrc para persistir.

Lina: Eu defini uma variavel com export, mas quando fechei o terminal ela desapareceu...
Veterano Linny: Esse e o topico de "persistencia". export so vive durante a sessao atual do shell. O proximo shell esquece. Para manter, escreva em um arquivo de configuracao.

4-1. Qual arquivo devo editar?

Arquivo Quando carrega Uso tipico
~/.bashrc Todo shell bash interativo Variaveis e aliases pessoais
~/.profile / ~/.bash_profile Uma vez no login Variaveis de ambiente no SSH
/etc/environment Sistema inteiro, todos os usuarios Configuracoes compartilhadas (root)

Na duvida, edite ~/.bashrc. E a escolha mais confiavel para terminais GUI, WSL e sessoes SSH.

4-2. Exemplo de adicoes 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

Esquecer o source e uma armadilha classica de iniciantes. Apos editar um arquivo de configuracao, sempre faca source nele ou abra um novo shell.

Lina: O que source realmente faz?
Veterano Linny: Ele diz ao shell "releia este arquivo dentro do shell atual." Normalmente, executar um script cria um processo filho, entao qualquer export dentro dele morre com o filho. source executa as linhas no seu shell atual, entao as mudancas permanecem.

5. Armadilhas Comuns

Conclusao: Cuidado com uso incorreto de $, espacos ao redor de = e sobrescrita de PATH.

Veterano Linny: Voce ja tem os fundamentos. Vou encerrar com os erros que 99% dos iniciantes cometem.

5-1. Esquecer / adicionar $

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

# Certo: expande o valor
$ echo $HOME

5-2. Espacos 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 voce acidentalmente apagar o PATH, apenas abra um novo terminal. O PATH padrao volta. Nao edite o .bashrc em panico primeiro.

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 pratica: Use aspas duplas "..." quando quiser expansao de variaveis. Use aspas simples '...' para strings literais.

5-5. "Eu exportei mas meu script nao ve"

Quando voce executa um script com ./script.sh, variaveis exportadas do shell pai sao herdadas. Mas um terminal novo carrega .bashrc do zero — se a variavel nao esta la, ela nao existe.

Para variaveis das quais seus scripts dependem, adicione-as ao .bashrc para que estejam sempre disponiveis.

6. Pratica Hands-On

Conclusao: Tres exercicios: definir uma variavel, estender o PATH, executar seu proprio comando.

Veterano Linny: O conhecimento fixa mais rapido quando voce digita. Vamos fazer tres exercicios rapidos.

Exercicio 1: Cumprimente-se com uma variavel

$ MY_NAME=(seu nome)
$ echo "Hello, $MY_NAME!"
Mostrar dica

Nao coloque espacos ao redor de =. Use aspas duplas para que $MY_NAME seja expandido.

Exercicio 2: Criar ~/bin e adicionar ao PATH

$ mkdir -p ~/bin
$ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
$ echo $PATH

Voce deve ver /home/seunome/bin perto do inicio do PATH.

Exercicio 3: Execute seu proprio comando

$ cat > ~/bin/hello << 'EOF'
#!/bin/bash
echo "Hello from my own script!"
EOF
$ chmod +x ~/bin/hello
$ hello
Hello from my own script!
Lina: Funcionou! Executar meu proprio comando de qualquer lugar e surpreendentemente legal.
Veterano Linny: Esse e o poder do PATH. "Command not found" nao vai mais te assustar.

7. Resumo

Folha de consulta rapida

# 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

Nao faca isto

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

Proxima Leitura