37 votes

Les variables d'environnement ne sont pas accessibles en bash script.

J'ai rencontré un problème étrange. J'ai mis quelques variables env dans .bashrc et il fonctionne comme il se doit :

echo $HADOOP_HOME
/home/me/dist/hadoop

Mais la variable env n'est pas accessible lors de l'exécution de bash scripts. Supposons que je crée /tmp/sample.sh avec le contenu ci-dessous :

#! /bin/bash
echo $HADOOP_HOME

Lorsque j'exécute le script script ci-dessus, l'écho est une ligne vide :

/tmp/sample.sh

48voto

Stewart Points 1385

En effet, le HADOOP_HOME n'est pas exportée :

$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"

$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop

$ foo.sh
HADOOP_HOME: 

$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop

Lorsque vous exécutez un Shell Shell, ce Shell s'exécutera dans sa propre instance de bash (c'est ce que l'option #!/bin/bash ) qui est un enfant Shell de l'actuel. Les variables ne sont pas transmises aux shells enfants par défaut, seulement si elles sont exportées. Considérez chaque session bash comme indépendante (elles le sont en grande partie). Vous ne voulez généralement pas que les variables définies dans l'une polluent l'environnement d'une autre. Pour les cas où cela est nécessaire, utilisez export .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X