J'ai rencontré un problème étrange. J'ai mis quelques variables env dans .bashrc
et cela 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 scripts bash. Supposons que je crée /tmp/sample.sh
avec le contenu ci-dessous:
#! /bin/bash
echo $HADOOP_HOME
Lorsque je cours au-dessus du script, une ligne vide apparaît:
/tmp/sample.sh
En effet, la variable 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 script shell, ce dernier s'exécutera dans sa propre instance bash (c'est ce que fait le #!/bin/bash
), qui est un shell enfant de celle en cours. Les variables ne sont pas transmises aux shells enfants par défaut, uniquement si elles sont exportées. Pensez à chaque session bash en tant qu'indépendante (ils le sont en grande partie) En général, vous ne voulez pas que les variables définies dans l’une polluent l’environnement de l’autre. Dans les cas où cela est nécessaire, utilisez export
.