Bash 脚本不执行来自 PATH 的命令

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

如果我只是在控制台中调用命令,一切都会正常,但在脚本中却不行。我做错了什么?

答案1

这不是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

在我看来,该命令的值或输出hadoop fs -lsFound,当你给出这样的命令时,这个字符串被 bash 再次解析$(hadoop fs -ls)。因此,在执行脚本时会显示以下错误消息hello.sh

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

相关内容