web-dev-qa-db-ja.com

BashスクリプトはPATHからコマンドを実行しません

次の簡単なスクリプトがあります。

#!/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

コンソールでコマンドを呼び出すだけですべてが機能しますが、スクリプト内では機能しません。私は何を間違えていますか?

2
Moses

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 -lsFoundです。この文字列は、この$(hadoop fs -ls)のようなコマンドを指定すると、bashによって再び解析されます。スクリプトhello.shの実行中に以下のエラーメッセージが表示されるように、

./hello.sh: line 3: Found: command not found
2
Avinash Raj