J'ai ce script simple:
#!/bin/bash
echo ${HADOOP_HOME}
$(hadoop fs -ls)
La sortie est:
/opt/hadoop-0.20.2-cdh3u2
./hello.sh: line 3: Found: command not found
Donc bash voit définitivement HADOOP_HOME. Je l'ai défini dans ~/.profile et ajouté le chemin d'accès au dossier bin:
export HADOOP_HOME="/opt/hadoop-0.20.2-cdh3u2"
export PATH=$PATH:$HADOOP_HOME/bin
Si j'appelle simplement la commande dans la console, tout fonctionne, mais pas dans un script. Qu'est-ce que je fais mal?
Ce n'est pas le problème avec la commande echo ${HADOOP_HOME}
. Celui qui provoque l'erreur est $(hadoop fs -ls)
Vous devez donner la 3ème ligne de ce script sous la forme echo $(hadoop fs -ls)
. Donc, le script va ressembler,
#!/bin/bash
echo ${HADOOP_HOME}
echo $(hadoop fs -ls)
Si vous donnez la commande comme ceci $(hadoop fs -ls)
, bash la analyse et trouve sa valeur. Et la valeur fondée est à nouveau analysée par bash.
Exemple:
$ var=4
$ $var
4: command not found
$ echo $var
4
IMO, la valeur ou le résultat de la commande hadoop fs -ls
est Found
, cette chaîne trouvée a de nouveau été analysée par bash lorsque vous donnez la commande comme ceci $(hadoop fs -ls)
. Pour que le message d'erreur ci-dessous s'affiche lors de l'exécution du script hello.sh
,
./hello.sh: line 3: Found: command not found