我有这个简单的脚本:
#!/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
,当您给出这样的命令时,找到的这个字符串又被bash解析了$(hadoop fs -ls)
。这样,在执行脚本时将显示以下错误消息hello.sh
,
./hello.sh: line 3: Found: command not found
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句