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 $VARouenv - Definir suas próprias variáveis de ambiente com
export - Entender o
PATHe 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?
$HOME e $PATH nos tutoriais o tempo todo. O que são? O sinal $ parece um feitiço mágico./home/lina" com o nome HOME. Escreva $HOME e ele entrega o valor.As palavras usadas aqui
- Variável: uma caixa com nome que guarda um valor. Escreva o nome e você recebe o conteúdo.
- Variável de shell: uma variável que existe somente dentro do shell atual.
- Variável de ambienteUm valor nomeado que o shell ou um programa pode consultar durante a execução.: uma variável de shell que também é entregue aos comandos iniciados dali. O
exporté o que torna ela assim. - Processo filho: um comando iniciado a partir de outro comando.
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 $VARouenv | 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
- SO: Ubuntu / outras distribuições Linux
- Shell: bash (zsh funciona quase da mesma forma)
- Um terminal mostrando o promptUm símbolo (como $ ou #) exibido quando o shell está esperando sua entrada.
$
1. Lendo Variáveis de Ambiente
Conclusão: Leia uma com
echo $VARe todas comenvprimeiro.
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
$, oecho HOMEapenas 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.
$ faz uma diferença enorme.$ é 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 |
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.
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
export? Parecem iguais para mim.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.
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
PATHguarda 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
ls na verdade mora em /usr/bin/.ls funciona porque /usr/bin está no seu PATH.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
export PATH="$HOME/bin" e agora nem o ls nem o cat funcionam. Eu quebrei a minha máquina?PATH, então o shell parou de procurar em /usr/bin..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.
export. Quando fechei o terminal, ela sumiu.export vale apenas para o shell atual.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.
source realmente faz?export lá dentro nunca volta para o shell pai.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.
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.
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.
PATH. O "command not found" não vai mais te assustar.7. Revisão
$ é o interruptor que puxa o valor. O export entrega esse valor aos processos filhos..bashrc mantém o valor para o próximo terminal.PATH é a lista de lugares onde procurar. Quando aparecer command not found, eu confiro echo $PATH e which primeiro.:$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
$HOMEentre aspas simples e se perguntar por que não expande - Editar
.bashrcsem fazersourcee reclamar que "nada mudou"
Resumo do Dia em 3 Linhas
- O
$VARpuxa o valor de uma variável. Leia o estado atual comecho $HOMEouenv - Somente as variáveis marcadas com
exportsão entregues aos processos filhos - Ao adicionar algo ao
PATH, mantenha sempre o:$PATHno final