次の簡単なスクリプトがあります。
#!/bin/bash
echo ${HADOOP_HOME}
$(hadoop fs -ls)
出力は次のとおりです。
/opt/hadoop-0.20.2-cdh3u2
./hello.sh: line 3: Found: command not found
そのため、bashはHADOOP_HOMEを確実に認識します。 〜/ .profileに設定し、binフォルダーにパスを追加しました。
export HADOOP_HOME="/opt/hadoop-0.20.2-cdh3u2"
export PATH=$PATH:$HADOOP_HOME/bin
コンソールでコマンドを呼び出すだけですべてが機能しますが、スクリプト内では機能しません。私は何を間違えていますか?
echo ${HADOOP_HOME}
コマンドの問題ではありません。エラーの原因は$(hadoop fs -ls)
です
そのスクリプトの3行目をecho $(hadoop fs -ls)
として指定する必要があります。したがって、スクリプトは次のようになります。
#!/bin/bash
echo ${HADOOP_HOME}
echo $(hadoop fs -ls)
この$(hadoop fs -ls)
のようなコマンドを指定すると、bashはそれを解析し、その値を見つけます。そして、確立された値は再びbashによって解析されます。
例:
$ var=4
$ $var
4: command not found
$ echo $var
4
IMO、コマンドの値または出力hadoop fs -ls
はFound
です。この文字列は、この$(hadoop fs -ls)
のようなコマンドを指定すると、bashによって再び解析されます。スクリプトhello.sh
の実行中に以下のエラーメッセージが表示されるように、
./hello.sh: line 3: Found: command not found