`
Cosa fa#
Marca una variabile shell come variabile d'ambiente, rendendola visibile a tutti i processi figli lanciati dalla sessione corrente. Senza export, una variabile esiste solo nella shell corrente e non viene ereditata.
Sintassi#
export [variabile[=valore]]
Comandi essenziali#
| Comando | Flag | Significato flag | Cosa fa |
|---|---|---|---|
export VAR=valore | — | — | Definisce e esporta in un solo passaggio |
VAR=valore; export VAR | — | — | Definisce prima, esporta dopo — equivalente |
export PATH=$PATH:/nuovo | — | — | Aggiunge una directory al PATH |
export -p | -p | Mostra tutte le variabili esportate nella sessione |
PATH — aggiungere, verificare, ricaricare#
Il PATH e' la lista di directory dove la shell cerca gli eseguibili, separate da :. Quando scrivi ls, la shell cerca ls in ogni directory del PATH nell'ordine elencato.
# Vedere il PATH attuale
echo $PATH
printenv PATH
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Aggiungere una directory al PATH per la sessione corrente
export PATH=$PATH:/opt/mio-tool/bin
# $PATH = valore attuale, : = separatore, poi la nuova directory
# Aggiungere in modo permanente — scrivi in ~/.bashrc o ~/.profile
echo 'export PATH=$PATH:/opt/mio-tool/bin' >> ~/.bashrc
# Ricaricare il file senza chiudere il terminale
source ~/.bashrc
# oppure il punto e' un alias di source:
. ~/.bashrcsource — eseguire un file nella shell corrente#
source (o il suo alias .) esegue un file di script nella shell corrente invece di aprire una subshell. Le variabili definite nel file diventano disponibili nella sessione corrente.
source ~/.bashrc # ricarica la configurazione bash
source ~/.zshrc # ricarica la configurazione zsh
. ~/.profile # equivalente con il punto
# Differenza critica:
bash script.sh # esegue in una subshell — le variabili non escono
source script.sh # esegue nella shell corrente — le variabili restano# La differenza in tre scenari:
# Scenario 1 — variabile locale + subshell
MESSAGGIO="ciao"
./test.sh # NON vede $MESSAGGIO — subshell separata
# Scenario 2 — export + subshell
export MESSAGGIO="ciao"
./test.sh # VEDE $MESSAGGIO — eredita l'ambiente
# Scenario 3 — source (nessuna subshell)
MESSAGGIO="ciao"
source test.sh # VEDE $MESSAGGIO — stesso processoMANWIDTH — esempio di variabile di sessione#
# Imposta la larghezza di man per la sessione corrente
export MANWIDTH=75
# Oppure solo per un singolo comando senza export permanente
MANWIDTH=75 man ls
# la variabile viene passata solo a quel processo, non esportata globalmenteCombinazioni utili#
# Verifica che una variabile sia stata esportata correttamente
printenv NOME_VARIABILE
# Esporta piu' variabili in un colpo
export EDITOR=vim PAGER=less HISTSIZE=10000
# Rimuovi una variabile dall'ambiente
unset NOME_VARIABILEexport in ~/.bashrc#
è il pattern corretto per variabili "globali" personali:
apri terminale
│
▼
bash legge ~/.bashrc
│
▼
export PATH=$PATH:/nuovo ← viene eseguito
export EDITOR=vim ← viene eseguito
│
▼
variabili disponibili in questa shell
e in tutti i processi figli che lanciaOgni volta che apri un nuovo terminale, ~/.bashrc viene riletto e le variabili vengono ri-esportate. Non sono "globali" nel senso del sistema operativo — sono ri-create ad ogni shell — ma in pratica si comportano come tali per l'utente.
La distinzione importante: se cambi ~/.bashrc e vuoi che la shell corrente la veda subito, devi fare source ~/.bashrc — la shell corrente non la rilegge automaticamente.
Scenario Reale#
Un analista scrive uno script Python che legge la API key da variabile d'ambiente invece di averla hardcoded nel codice. Prima di lanciare lo script esegue export ANTHROPIC_API_KEY=$(cat ~/.secrets/key) — la variabile viene ereditata dal processo Python figlio. Questo e' il pattern corretto: mai mettere segreti nel codice, sempre passarli via ambiente.
Dove l'ho usato#
- shell-environment — contesto teorico delle variabili d'ambiente
Note personali#
export PATH=$PATH:/nuova/dir — il $PATH prima dei due punti e' fondamentale. Senza di esso sostituiresti l'intero PATH con solo la nuova directory, rendendo inaccessibili tutti i comandi di sistema.export nel terminale sono temporanee — durano solo fino alla chiusura della sessione. Per renderle permanenti devi scriverle in ~/.bashrc (non-login) o ~/.profile (login).Collegato a#
- system — categoria
- printenv — per verificare le variabili esportate
- shell-environment — concetto teorico
- shell-interattiva — i dotfile usano export per definire l'ambiente


