![Bash 脚本不执行来自 PATH 的命令](https://linux22.com/image/1046278/Bash%20%E8%84%9A%E6%9C%AC%E4%B8%8D%E6%89%A7%E8%A1%8C%E6%9D%A5%E8%87%AA%20PATH%20%E7%9A%84%E5%91%BD%E4%BB%A4.png)
我有这个简单的脚本:
#!/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 -ls
是Found
,当你给出这样的命令时,这个字符串被 bash 再次解析$(hadoop fs -ls)
。因此,在执行脚本时会显示以下错误消息hello.sh
,
./hello.sh: line 3: Found: command not found