web-dev-qa-db-fra.com

Comment corriger l'erreur "not a valid identifier" après la définition des variables d'environnement?

J'essaie d'installer cocos2dx dans Ubuntu 14.04 LTS mais après avoir défini les variables d'environnement (dans .bashrc), je commence à obtenir cette erreur:

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

Et je ne sais pas quoi faire pour le réparer.

7
Carlos Campos

mais après avoir défini les variables environnementales

On dirait que vous ne l'avez pas fait correctement.

Les erreurs que vous obtenez signifient que les chemins (comme /home/john/Android) sont utilisés comme noms de variables, plutôt que comme valeurs qui leur sont attribuées.

  • La syntaxe correcte pour affecter une variable est NAME=value.
  • La syntaxe correcte pour exporter une variable (quelle que soit sa valeur, si elle a déjà été affectée) est export NAME.
  • La syntaxe correcte pour affecter et exporter une variable (avec la valeur affectée) en même temps est export NAME=value.

Je suppose que vous essayez de faire la troisième chose mais en utilisant une syntaxe incorrecte. Voici quatre erreurs courantes susceptibles de produire des erreurs telles que celles que vous constatez:

  1. L'utilisation d'espaces au lieu de =.export NAME value est incorrecte; value est ensuite interprété comme le nom d'une variable ultérieure à exporter.

    (Cela est dû au fait que export NAME1 NAME2est ​​la syntaxe correcte pour exporter plusieurs variables.)

  2. Espacement entre les espaces =. Dans de nombreux langages de programmation, il est à la fois valide et stylistiquement préférable que les opérateurs de pad avec des espaces la plupart du temps. Toutefois, pour affecter une valeur à une variable dans un script Shell (ou dans une autre situation dans laquelle vous émettez des commandes Shell), cette opération n'est pas autorisée. NAME = value (dans une commande export ou autrement) ne fonctionnera pas; vous devez utiliser NAME=value.

    (export NAME = value tente d'exporter des variables nommées NAME, = et value. Heureusement, cela ne semble jamais réussir en silence, car tenter d'exporter une variable appelée = est une erreur de syntaxe. Par contraste, export NAME= value semblera fonctionner, mais n'affectera pas value à NAME- Au lieu de cela, il affecte la chaîne vide de longueur nulle à NAME et l'exporte, puis exporte séparément la variable value. Ces deux erreurs sont courantes.)

  3. Séparer les espaces de la valeur de la variable. Les variables d'environnement can peuvent contenir des espaces, mais ils sont rarement utilisés comme séparateurs de champs dans les variables d'environnement. Lorsqu'une seule variable contient intentionnellement plusieurs chemins, : est généralement utilisé pour les séparer.

  4. Ne pas citer d'espaces lors de l'attribution de variables. Parfois, la valeur d'une variable d'environnement est supposée contenir un espace. Par exemple, il peut s'agir du nom d'un répertoire contenant réellement un espace. Dans ce cas, il est nécessaire de citer des espaces.

    Une façon de faire est de les précéder de \. Voir Comment protéger les parenthèses passées à une commande cd? et Impossible de supprimer le fichier pour plus d'informations sur les autres méthodes - les méthodes présentées dans les réponses s'appliquent, même si aucune question concerne spécifiquement l’affectation à des variables d’environnement.

    Par exemple, voici quelques façons d’exporter la variable d’environnement SILLYPATH avec la valeur /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"

    Souvent, lorsqu'un dossier que vous devez utiliser dans un shell ou affecter à une variable d'environnement largement utilisée contient un espace, il peut être avantageux de le renommer. (Mais parfois c'est peu pratique ou indésirable.)

Je soupçonne que cela peut être suffisant pour que vous trouviez et corrigiez le bogue dans votre fichier .bashrc. Si vous avez besoin d’une aide supplémentaire, vous devez bien sûr publier le contenu complet de ce fichier pour analyse. (Ce n'est que par coïncidence que votre problème s'est avéré être un problème suffisamment rencontré fréquemment et avec un message d'erreur suffisamment transparent pour rendre possible une réponse générale comme celle-ci.)

11
Eliah Kagan

Assurez-vous que vous utilisez:

export ENV_VARIABLE

Plutôt que:

export $ENV_VARIABLE

Sinon, vous essayez d'exporter la valeur de la variable plutôt que la variable elle-même, vous obtiendrez donc cette erreur.

4
Lambda Pi Omega

Éliminer les espaceset le signe dollar. Par exemple, cela fonctionne exactement de la même manière que vous pouvez définir un module de paramètres Django sur un serveur Web via SSH, à savoir:

export Django_SETTINGS_MODULE=myapp.settings
1
Patrick Mutuku