1
#!/bin/bash
export HIVE_OPTS="$HIVE_OPTS -hiveconf mapred.job.queue.name=hdmi-technology"
export HIVE_AUX_JARS_PATH=/home/hadoop/lib/HiveUDF.jar
hive -S -e 'set mapred.job.queue.name=hdmi-technology'
hive -S -e 'SELECT count(*) from testingtable2' > attachment.txt

每当我尝试像下面那样运行上面的 shell 脚本(count.sh)时,我总是会出错,我不知道我做错了什么,因为我是 shell 脚本的新手,我不确定如何在其中添加环境变量外壳脚本。

bash-3.00$ sh count.sh
count.sh: HIVE_OPTS= -hiveconf mapred.job.queue.name=hdmi-technology^M: is not an
identifier

通过在前两行添加环境变量的方式,我在我的 shell 脚本中做错了什么吗?任何帮助将不胜感激。

在我按照以下评论所做的所有更改之后,

mv count.sh count, 
chmod +x count, 
./count

每当我尝试直接在提示符中执行此操作时,export HIVE_AUX_JARS_PATH=/home/hadoop/lib/HiveUDF.jar它都可以正常工作,但是每当我尝试将其添加到我的问题中提到的 shell 脚本中时,我总是得到 'java.io.FileNotFoundException(File file:/home/hadoop/lib /HiveUDF.jar 不存在,为什么会这样?

4

2 回答 2

2

您正在使用sh不是 bash 的命令运行 bash 脚本。运行它以./count.sh使 shebang 行生效,或者直接说bash count.sh.

于 2012-07-27T00:50:50.800 回答
1

您在 DOS 或 Windows 机器上编辑了 shell 脚本,它使用 CRLF 对 ( \r\n) 而不是 Unix 样式的 LF ('\n') 行尾。

是一个故事^M——它是一个\r回车符。

这应该解决它:

tr -d '\r' < count.sh > count.sh.fixed
mv count.sh.fixed count.sh

另外一个选项:

sed -i 's/\r//g' count.sh
于 2012-07-27T00:46:28.027 回答