Variáveis de ambiente: export, .bashrc e .bash_profile
1. O que são variáveis de ambiente no Bash
Variáveis de ambiente são pares chave-valor que influenciam o comportamento de processos em execução no sistema. No Bash, elas funcionam como um mecanismo de comunicação entre o shell e os programas que ele executa. Diferentemente das variáveis de shell (locais), que existem apenas na sessão atual do shell, as variáveis de ambiente são herdadas por processos filhos e sub-shells.
Variáveis de shell comuns incluem $variavel_local, que só existe dentro do shell que a definiu. Já variáveis de ambiente como PATH, HOME, USER e SHELL estão disponíveis para qualquer programa iniciado a partir do shell. Por exemplo:
echo "Meu diretório home é: $HOME"
echo "Meu shell padrão é: $SHELL"
echo "Meu usuário é: $USER"
echo "O PATH atual é: $PATH"
A variável PATH merece destaque: ela contém uma lista de diretórios separados por dois-pontos (:) onde o sistema procura por executáveis. Sem ela, você precisaria digitar o caminho completo de cada comando.
2. O comando export: tornando variáveis acessíveis
O comando export transforma uma variável de shell em variável de ambiente, disponibilizando-a para processos filhos. Sua sintaxe básica é:
export MINHA_VAR="valor"
Ou em duas etapas:
MINHA_VAR="valor"
export MINHA_VAR
Para visualizar todas as variáveis exportadas atualmente, use env ou printenv:
env | grep MINHA_VAR
printenv MINHA_VAR
A diferença prática fica clara com um exemplo:
# Variável local (não exportada)
LOCAL="somente neste shell"
bash -c 'echo $LOCAL' # Não exibe nada
# Variável de ambiente (exportada)
export AMBIENTE="disponível para filhos"
bash -c 'echo $AMBIENTE' # Exibe: disponível para filhos
3. Arquivos de inicialização do Bash: visão geral
O Bash carrega diferentes arquivos de configuração dependendo de como é iniciado. Existem dois modos principais:
Shell de login: iniciado quando você faz login via terminal (SSH, console físico, ou com --login). A ordem de carregamento é:
1. /etc/profile (configurações globais do sistema)
2. ~/.bash_profile (ou ~/.bash_login ou ~/.profile, nesta ordem de precedência)
Shell não-login interativo: comum ao abrir um terminal no ambiente gráfico. Carrega apenas:
1. ~/.bashrc
Shell não-interativo (scripts): geralmente não carrega esses arquivos, a menos que explicitamente configurado.
4. .bashrc: configurações para shells interativos
O arquivo ~/.bashrc é executado toda vez que você abre um novo terminal no ambiente gráfico. Por isso, é o local ideal para definir aliases, funções e variáveis de ambiente que você deseja disponíveis em todas as sessões interativas.
Exemplo prático de .bashrc:
# ~/.bashrc
# Adicionar diretórios personalizados ao PATH
export PATH="$HOME/bin:$HOME/.local/bin:$PATH"
# Definir editor padrão
export EDITOR=nano
export VISUAL=nano
# Aliases úteis
alias ll='ls -lah'
alias ..='cd ..'
alias gs='git status'
# Variáveis de ambiente para desenvolvimento
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
export M2_HOME="$HOME/tools/apache-maven-3.8.6"
export PATH="$M2_HOME/bin:$PATH"
# Prompt personalizado
export PS1='[\u@\h \W]\$ '
5. .bash_profile e .bash_login: configurações para login
O ~/.bash_profile é executado apenas uma vez, durante o login. Por isso, é comum usá-lo para definir variáveis que não mudam frequentemente ou para iniciar programas específicos.
Uma estratégia amplamente adotada é fazer o .bash_profile carregar o .bashrc:
# ~/.bash_profile
# Carregar configurações do bashrc
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
# Variáveis específicas de login
export PATH="/opt/some-app/bin:$PATH"
export DISPLAY=:0
Isso garante que as configurações do .bashrc estejam disponíveis mesmo em shells de login, evitando duplicação de código.
6. Escopo e persistência das variáveis
O ciclo de vida de uma variável de ambiente definida manualmente no terminal termina quando a sessão é encerrada. Para persistência, é necessário definir as variáveis nos arquivos de inicialização apropriados.
Variáveis definidas em /etc/environment afetam todos os usuários do sistema, enquanto ~/.pam_environment oferece configurações por usuário no login via PAM.
Exemplo de /etc/environment:
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
A diferença prática entre exportar no terminal vs. nos arquivos:
# No terminal (válido apenas para esta sessão)
export TEMP_VAR="sumiu ao fechar"
# No .bashrc (persistente para shells interativos)
echo 'export PERSISTENTE="sempre disponível"' >> ~/.bashrc
7. Como editar e recarregar as configurações
Para editar os arquivos, use seu editor preferido:
nano ~/.bashrc
vim ~/.bash_profile
Ou adicione linhas com redirecionamento:
echo 'export MEU_CAMINHO="/home/user/apps"' >> ~/.bashrc
Após editar, recarregue sem reiniciar o terminal:
source ~/.bashrc
# ou
. ~/.bashrc
Verifique se a variável foi carregada:
echo $MEU_CAMINHO
env | grep MEU_CAMINHO
8. Armadilhas comuns e boas práticas
Sobrescrita acidental do PATH: sempre use $PATH ao final da atribuição:
# ERRADO: sobrescreve completamente o PATH
export PATH="/meu/diretorio"
# CORRETO: adiciona ao início mantendo o original
export PATH="/meu/diretorio:$PATH"
Export desnecessário em scripts: em scripts, variáveis locais geralmente são suficientes. Use export apenas quando precisar que um subprocesso as herde.
Separando configurações por host: use condicionais no .bashrc:
if [ "$(hostname)" = "servidor-producao" ]; then
export NODE_ENV=production
export DATABASE_URL="postgresql://..."
fi
Boas práticas resumidas:
- Coloque aliases e funções no .bashrc
- Use .bash_profile apenas para carregar .bashrc e configurar variáveis de login
- Evite duplicar configurações entre os arquivos
- Sempre use aspas ao definir valores com espaços: export VAR="valor com espacos"
- Documente suas variáveis com comentários
Referências
- GNU Bash Manual - Bourne Shell Builtins (export) — Documentação oficial do comando
exportno Bash, com sintaxe detalhada e exemplos. - Arch Linux Wiki - Environment variables — Guia completo sobre variáveis de ambiente no Linux, incluindo arquivos de configuração e boas práticas.
- Linuxize - Bashrc vs Bash_profile — Explicação clara das diferenças entre
.bashrce.bash_profile, com exemplos práticos de uso. - DigitalOcean - How To Read and Set Environmental and Shell Variables on Linux — Tutorial abrangente sobre como ler e definir variáveis de ambiente e shell no Linux.
- SS64.com - Bash export command — Referência rápida do comando
exportcom exemplos de sintaxe e casos de uso comuns. - Red Hat - Chapter 13. Working with Global Environment Variables — Documentação da Red Hat sobre variáveis de ambiente globais e configuração do sistema.