通过添加env变量来执行Shell脚本

时间:2012-07-27 00:41:10

标签: bash shell unix hadoop hive

#!/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脚本的新手,我不知道如何添加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不存在。为什么会这样?

2 个答案:

答案 0 :(得分:2)

您正在运行一个bash脚本,其中sh命令不是bash。使用./count.sh运行它以使shebang行生效,或者只说bash count.sh

答案 1 :(得分: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