Come correggere l'errore "non un identificatore valido" dopo aver impostato le variabili di ambiente?


12

Sto cercando di installare cocos2dx in Ubuntu 14.04 LTS ma dopo aver impostato le variabili ambientali (in .bashrc) inizio a ricevere questo errore:

bash: export: dev/cocos2d-x-3.2/tools/cocos2d-console/bin': not a valid identifier 
bash: export:/home/john/android': not a valid identifier 
bash: export: dev/android-ndk-r10b': not a valid identifier 
bash: export:dev/adt-bundle-linux-x86_64-20140702/sdk': not a valid identifier

E non so cosa fare per risolverlo.


1
Dovrai mostrare esattamente come stai impostando le variabili.
Glenn Jackman,

Risposte:


16

ma dopo aver impostato le variabili ambientali

Sembra che tu non l'abbia fatto correttamente.

Gli errori che stai ricevendo indicano che i percorsi (come /home/john/android) vengono utilizzati come nomi di variabili, piuttosto che come valori assegnati a loro.

  • La sintassi corretta per assegnare una variabile è NAME=value.
  • La sintassi corretta per esportare una variabile (con qualunque valore, se presente, è già stata assegnata) è export NAME.
  • La sintassi corretta per assegnare ed esportare una variabile (con il valore assegnato) allo stesso tempo è export NAME=value.

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:

  1. Usare gli spazi invece di =. export NAME valuenon è corretto; valueviene 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.)

  2. 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 exportcomando 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= valuesembrerà funzionare, ma non si assegna valuea - NAMEinvece, assegna il vuoto, stringa di lunghezza zero in NAMEe la esporta, ed esporta separatamente la variabile value. Entrambi sono errori comuni.)

  3. 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.

  4. 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 SILLYPATHcon 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.)

  5. 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 exportpotrebbe 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 .bashrcin un editor (ad esempio, nano ~/.bashrc, gedit ~/.bashrc) invece di reindirizzare output alla fine di esso con>> .

Ho il sospetto che questa possa essere un'informazione sufficiente per trovare e correggere il bug nel tuo .bashrcfile. Se hai bisogno di ulteriore aiuto, dovresti ovviamente pubblicare l'intero contenuto di quel file per l'analisi. (È solo per coincidenza che il tuo problema è stato riscontrato in modo sufficientemente frequente e con un messaggio di errore sufficientemente trasparente, per rendere possibile una risposta generale come questa.)


2
Grazie! Una risposta così dettagliata. Nel mio caso il problema era mettere lo spazio intorno = = . Ho lottato con questo per un po '.
Rengas,

5

Assicurati di essere in esecuzione:

export ENV_VARIABLE

Piuttosto che:

export $ENV_VARIABLE

Altrimenti, stai tentando di esportare il valore della variabile anziché la variabile stessa, quindi otterrai questo errore.


1

Elimina gli spazi e il simbolo del dollaro. Ad esempio, funziona allo stesso modo in cui è possibile impostare un modulo di impostazioni django su un server Web tramite SSH, ovvero:

export DJANGO_SETTINGS_MODULE=myapp.settings

0

Ho visto questo accadere abbastanza frequentemente quando copi qualcosa con virgolette (dal web) e aggiorni i tuoi ambienti o il file bashrc.

Un buon punto di partenza sarebbe semplicemente digitare manualmente le virgolette nel contenuto incollato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.