O script Bash não executa o comando do PATH

2

Eu tenho este script simples:

#!/bin/bash
echo ${HADOOP_HOME}
$(hadoop fs -ls)

A saída é:

/opt/hadoop-0.20.2-cdh3u2
./hello.sh: line 3: Found: command not found

Então o bash definitivamente vê o HADOOP_HOME. Eu configurei em ~ / .profile e adicionei o caminho para a pasta bin:

export HADOOP_HOME="/opt/hadoop-0.20.2-cdh3u2"
export PATH=$PATH:$HADOOP_HOME/bin

Se eu simplesmente invocar o comando no console tudo funciona, mas dentro de um script não funciona. O que estou fazendo errado?

    
por Moses 29.04.2014 / 09:35

1 resposta

2

Não é o problema com o comando echo ${HADOOP_HOME} . O que causa o erro é $(hadoop fs -ls)

Você precisa fornecer a terceira linha desse script como echo $(hadoop fs -ls) . Então, o script será parecido com

#!/bin/bash
echo ${HADOOP_HOME}
echo $(hadoop fs -ls)

Se você der o comando assim $(hadoop fs -ls) , o bash o analisará e descobrirá seu valor. E o valor fundado é novamente analisado por bash.

Exemplo:

$ var=4
$ $var
4: command not found
$ echo $var
4

IMO, o valor ou a saída do comando hadoop fs -ls é Found , essa string encontrada foi novamente analisada por bash quando você dá o comando assim $(hadoop fs -ls) . Para que a mensagem de erro abaixo seja exibida durante a execução do script hello.sh ,

./hello.sh: line 3: Found: command not found
    
por Avinash Raj 29.04.2014 / 09:40