Il semble que vous n'ayez pas fait cela correctement.
Je soupçonne que vous essayez de faire la troisième chose mais en utilisant une mauvaise syntaxe. Cinq erreurs courantes qui pourraient produire des erreurs comme ce que vous voyez sont:
Utiliser des espaces au lieu de =
. export NAME value
est incorrect; value
est alors interprété comme le nom d'une variable suivante à exporter.
(Cela se produit car la syntaxe export NAME1 NAME2
est correcte pour exporter plusieurs variables.)
Mettre des espaces autour =
. Dans de nombreux langages de programmation, il est à la fois valide et stylistiquement préféré de garnir les opérateurs avec des espaces la plupart du temps. Mais pour attribuer une valeur à une variable dans un script shell (ou dans toute autre situation où vous émettez des commandes shell), cela n'est pas autorisé. NAME = value
(dans une export
commande ou autre) ne fonctionnera pas; vous devez utiliser NAME=value
.
( export NAME = value
Essais à des variables d'exportation nommées NAME
, =
et value
. Heureusement , ce ne semble réussir en silence parce que la tentative d'exporter une variable appelée =
est une erreur de syntaxe. En revanche export NAME= value
semble fonctionner, mais ne attribue value
à NAME
--instead, il affecte le vide, chaîne de longueur nulle NAME
et l'exporte, et exporte séparément la variable value
. Les deux sont des erreurs courantes.)
Séparer les parties de la valeur de la variable par des espaces. Les variables d'environnement peuvent contenir des espaces, mais en pratique, elles sont rarement utilisées comme séparateurs de champs dans les variables d'environnement. Lorsqu'une seule variable contient intentionnellement plusieurs chemins, elle :
est généralement utilisée pour les séparer.
Ne pas citer d'espaces lors de l'affectation à des variables. Parfois, la valeur d'une variable d'environnement est censée contenir un espace. Par exemple, il peut s'agir du nom d'un répertoire qui contient réellement un espace. Dans ce cas, il est nécessaire de citer tous les espaces.
Une façon de le faire est de les précéder de \
. Voir Comment puis-je protéger les parenthèses transmises à une commande cd? et Impossible de supprimer le fichier pour obtenir des informations sur d'autres manières - les méthodes présentées dans les réponses s'appliquent, même si aucune des questions ne concerne spécifiquement l'affectation aux 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.)
Assigner et / ou exporter une variable alors que rien ne devait être fait. C'est une sorte de méta-erreur; le problème technique spécifique est souvent l'un des problèmes ci-dessus, mais la solution est de se débarrasser de la ligne incriminée, ou d'une partie de celle-ci, plutôt que de la réparer. .bashrc
Bien sûr, ne supprimez pas aveuglément le code de . Mais un export
peut avoir été ajouté accidentellement, ou peut contenir par inadvertance plus de code que prévu. Par exemple, supposons que vous vouliez écrire:
echo 'export PATH=~/some.bin:"$PATH"' >>~/.bashrc; . ~/.bashrc
Cela s'ajouterait .bashrc
, puis le ressourcerait. Mais supposez que vous ayez plutôt écrit:
echo 'export PATH=~/some.bin:"$PATH" . ~/.bashrc' >>~/.bashrc # WRONG!
Ensuite, votre export
commande n'exporterait pas seulement une valeur augmentée de PATH
, mais tenterait également d'exporter les variables nommées .
et , ce qui n'est pas ce que vous voulez. Comme ils contiennent des caractères interdits dans les noms de variables, vous obtiendrez donc une erreur à chaque démarrage d'un nouveau shell bash interactif./home/your-username/.bashrc
Pour éviter ce problème, je suggère de modifier .bashrc
dans un éditeur (par exemple nano ~/.bashrc
, gedit ~/.bashrc
) plutôt que de rediriger la sortie à la fin avec >>
.