J'ai rencontré un problème étrange. J'ai mis quelques variables env .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 lance au-dessus du script, fait écho à une ligne vide:
/tmp/sample.sh
.bashrc
? Je suppose que vous n'êtes pasexport
ing :,export HADOOP_HOME=/home/me/dist/hadoop
lorsque vous exécutez/tmp
sample.sh` (qui génère un nouveaubash
avec un nouvel environnement) HADOOP_HOME n'est pas dans le nouvel environnement.Réponses:
C'est parce que la
HADOOP_HOME
variable n'est pas exportée:Lorsque vous exécutez un script shell, ce script s'exécutera dans sa propre instance bash (c'est ce que
#!/bin/bash
fait le) qui est un shell enfant de celui en cours. Les variables ne sont pas transmises aux shells enfants par défaut, uniquement 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, utilisezexport
.la source