Skip to main content
  1. Comandi/

export - export variable to environment

·4 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

`

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
#

ComandoFlagSignificato flagCosa fa
export VAR=valoreDefinisce e esporta in un solo passaggio
VAR=valore; export VARDefinisce prima, esporta dopo — equivalente
export PATH=$PATH:/nuovoAggiunge una directory al PATH
export -p-pprintMostra 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:
. ~/.bashrc

source — 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 processo

MANWIDTH — 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 globalmente

Combinazioni 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_VARIABILE

export 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 lancia

Ogni 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
#

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.
Le modifiche fatte con 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
#

Related