Вопрос Сценарий 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
2018-04-29 07:35


происхождения




ответы:


Это не проблема с echo ${HADOOP_HOME} команда. Тот, который вызывает ошибку, $(hadoop fs -ls)

Вы должны указать третью строку в этом скрипте как echo $(hadoop fs -ls), Таким образом, сценарий будет выглядеть,

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

Если вы дадите команду, как это $(hadoop fs -ls), Баш анализирует его и находит его ценность. И основанная ценность снова анализируется bash.

Пример:

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

IMO, значение или вывод команды hadoop fs -ls является Found, эта найденная строка снова была проанализирована bash, когда вы даете команду, подобную этой $(hadoop fs -ls), Чтобы отображалось следующее сообщение об ошибке при выполнении сценария hello.sh,

./hello.sh: line 3: Found: command not found

2
2018-04-29 07:40