Sembra che tu non l'abbia fatto correttamente.
Sospetto che tu stia tentando di fare la terza cosa ma stai utilizzando una sintassi errata. Cinque errori comuni che potrebbero produrre errori come quello che stai vedendo sono:
Usare gli spazi invece di =
. export NAME value
non è corretto; value
viene quindi interpretato come il nome di una variabile successiva da esportare.
(Ciò accade perché la sintassi export NAME1 NAME2
è corretta per l'esportazione di più variabili.)
Mettere gli spazi intorno =
. In molti linguaggi di programmazione, è sia valido che stilisticamente preferito per riempire gli operatori con spazi il più delle volte. Ma per assegnare un valore a una variabile in uno script di shell (o in un'altra situazione in cui si stanno emettendo comandi di shell), ciò non è consentito. NAME = value
(in un export
comando o altro) non funzionerà; devi usare NAME=value
.
(export NAME = value
tenta di esportare le variabili denominate NAME
, =
e value
. Fortunatamente questo non sembra mai riuscire in modo silenzioso perché il tentativo di esportare una variabile chiamata =
è un errore di sintassi. Al contrario export NAME= value
sembrerà funzionare, ma non si assegna value
a - NAME
invece, assegna il vuoto, stringa di lunghezza zero in NAME
e la esporta, ed esporta separatamente la variabile value
. Entrambi sono errori comuni.)
Separare parti del valore della variabile con spazi. Le variabili di ambiente possono contenere spazi, ma in pratica vengono raramente utilizzate come separatori di campi nelle variabili di ambiente. Quando una singola variabile contiene intenzionalmente più percorsi, di solito :
viene utilizzata per separarli.
Non quotare gli spazi durante l'assegnazione alle variabili. A volte il valore di una variabile d'ambiente dovrebbe contenere uno spazio. Ad esempio, potrebbe essere il nome di una directory che contiene davvero uno spazio. In tal caso, è necessario citare eventuali spazi.
Un modo per farlo è quello di precederli \
. Vedi Come posso proteggere le parentesi passate a un comando cd? e Impossibile eliminare il file per informazioni su altri modi: si applicano i metodi presentati nelle risposte, anche se nessuna delle due domande riguarda specificamente l'assegnazione alle variabili di ambiente.
Ad esempio, ecco alcuni modi per esportare la variabile di ambiente SILLYPATH
con il valore /home/ek/silly name/bin
:
export SILLYPATH=/home/ek/silly\ name/bin
export SILLYPATH='/home/ek/silly name/bin'
export SILLYPATH="/home/ek/silly name/bin"
Spesso quando una cartella che è necessario utilizzare in una shell o assegnare a una variabile di ambiente ampiamente utilizzata contiene uno spazio, potrebbe trarre vantaggio dal rinominare. (Ma a volte non è pratico o indesiderabile.)
Assegnare e / o esportare una variabile quando non si doveva fare nulla.Questo è una specie di meta-errore; il problema tecnico specifico è spesso uno dei precedenti, ma la soluzione è eliminare la linea offensiva, o parte di essa, piuttosto che risolverla. Non rimuovere indiscriminatamente codice da .bashrc
, ovviamente. Ma un export
potrebbe essere stato accidentalmente aggiunto o potrebbe inavvertitamente contenere più codice di quanto previsto. Ad esempio, supponi di voler scrivere:
echo 'export PATH=~/some.bin:"$PATH"' >>~/.bashrc; . ~/.bashrc
Ciò si aggiungerebbe a .bashrc
, quindi ri-fonte. Supponiamo che tu abbia invece scritto:
echo 'export PATH=~/some.bin:"$PATH" . ~/.bashrc' >>~/.bashrc # WRONG!
Quindi il tuo export
comando non solo esporrebbe un valore aumentato di PATH
, ma tenterebbe anche di esportare le variabili denominate .
e , che non è quello che desideri. Dal momento che contengono caratteri proibiti nei nomi delle variabili, si otterrebbe un errore ogni volta che si avvia una nuova shell bash interattiva./home/your-username/.bashrc
Per evitare questo problema, vi suggerisco di modifica .bashrc
in un editor (ad esempio, nano ~/.bashrc
, gedit ~/.bashrc
) invece di reindirizzare output alla fine di esso con>>
.