web-dev-qa-db-fra.com

Le script Bash n'exécute pas la commande de PATH

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?

2
Moses

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
2
Avinash Raj